feat(auth): implement user registration and login with JWT authentication
- Added `bcrypt`, `jsonwebtoken`, and `once_cell` dependencies to manage password hashing and JWT handling. - Created `Claims` struct for JWT claims and implemented token generation in the login route. - Implemented user registration and authentication logic in the `auth` module. - Updated error handling to include validation errors. - Created new routes for user registration and login, and integrated them into the main router. - Added tests for the authentication flow, including registration and login scenarios. - Updated user model to include a password hash field. - Refactored user creation logic to include password validation. - Adjusted feed and user routes to utilize JWT for authentication.
This commit is contained in:
@@ -9,6 +9,7 @@ pub struct Model {
|
||||
pub id: i32,
|
||||
#[sea_orm(unique)]
|
||||
pub username: String,
|
||||
pub password_hash: Option<String>,
|
||||
}
|
||||
|
||||
#[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)]
|
||||
|
19
thoughts-backend/models/src/params/auth.rs
Normal file
19
thoughts-backend/models/src/params/auth.rs
Normal file
@@ -0,0 +1,19 @@
|
||||
use serde::Deserialize;
|
||||
use utoipa::ToSchema;
|
||||
use validator::Validate;
|
||||
|
||||
#[derive(Deserialize, Validate, ToSchema)]
|
||||
pub struct RegisterParams {
|
||||
#[validate(length(min = 3))]
|
||||
pub username: String,
|
||||
#[validate(length(min = 6))]
|
||||
pub password: String,
|
||||
}
|
||||
|
||||
#[derive(Deserialize, Validate, ToSchema)]
|
||||
pub struct LoginParams {
|
||||
#[validate(length(min = 3))]
|
||||
pub username: String,
|
||||
#[validate(length(min = 6))]
|
||||
pub password: String,
|
||||
}
|
@@ -1,2 +1,3 @@
|
||||
pub mod auth;
|
||||
pub mod thought;
|
||||
pub mod user;
|
||||
|
@@ -6,4 +6,6 @@ use validator::Validate;
|
||||
pub struct CreateUserParams {
|
||||
#[validate(length(min = 2))]
|
||||
pub username: String,
|
||||
#[validate(length(min = 6))]
|
||||
pub password: String,
|
||||
}
|
||||
|
Reference in New Issue
Block a user