diff --git a/rear_auth/src/users.rs b/rear_auth/src/users.rs index 9a5f853..994df33 100644 --- a/rear_auth/src/users.rs +++ b/rear_auth/src/users.rs @@ -1,13 +1,13 @@ use async_trait::async_trait; use axum_login::{AuthUser, AuthnBackend, UserId}; use password_auth::verify_password; -use sea_orm::{ActiveModelTrait, DatabaseConnection, EntityTrait, ModelTrait, Set}; +use sea_orm::{ColumnTrait, DatabaseConnection, EntityTrait, QueryFilter}; use serde::{Deserialize, Serialize}; use thiserror::Error; use tokio::task; #[derive(Debug, Clone)] -struct UserDatabase { +pub struct UserDatabase { connection: DatabaseConnection, } @@ -113,11 +113,18 @@ impl AuthnBackend for UserDatabase { &self, creds: Self::Credentials, ) -> Result<Option<Self::User>, Self::Error> { - let user: Option<Self::User> = sqlx::query_as("select * from users where username = ? ") - .bind(creds.username) - .fetch_optional(&self.db) + let user_found = entity::User::find() + .filter(entity::user::Column::Username.eq(creds.username)) + .one(&self.connection) .await?; + let user = if let Some(user) = user_found { + let rear_user: User = user.into(); + Some(rear_user) + } else { + None + }; + // Verifying the password is blocking and potentially slow, so we'll do so via // `spawn_blocking`. task::spawn_blocking(|| {