User Authentication and Other fixes #1
@@ -31,7 +31,7 @@ use migration::{Migrator, MigratorTrait};
|
|||||||
use chrono::Local;
|
use chrono::Local;
|
||||||
use axum_login::{
|
use axum_login::{
|
||||||
axum_sessions::{async_session::MemoryStore as SessionMemoryStore, SessionLayer},
|
axum_sessions::{async_session::MemoryStore as SessionMemoryStore, SessionLayer},
|
||||||
AuthLayer, AuthUser, RequireAuthorizationLayer,
|
AuthLayer, RequireAuthorizationLayer,
|
||||||
};
|
};
|
||||||
use rand::Rng;
|
use rand::Rng;
|
||||||
|
|
||||||
@@ -244,20 +244,21 @@ pub async fn main() {
|
|||||||
|
|
||||||
|
|
||||||
let user_store = booksman_orm::AxumUserStore::new(&conn);
|
let user_store = booksman_orm::AxumUserStore::new(&conn);
|
||||||
let auth_layer = AuthLayer::new(user_store, &secret);
|
let auth_layer: AuthLayer<booksman_orm::AxumUserStore, booksman_orm::AxumUser> = AuthLayer::new(user_store, &secret);
|
||||||
|
|
||||||
let meili_client = Client::new(meili_url, meili_key);
|
let meili_client = Client::new(meili_url, meili_key);
|
||||||
|
|
||||||
|
|
||||||
let app = Router::new()
|
let app = Router::new()
|
||||||
.route("/api/search_openlibrary", get(search_openlibrary))
|
|
||||||
.route("/api/create_by_isbn", get(create_by_isbn))
|
.route("/api/create_by_isbn", get(create_by_isbn))
|
||||||
|
.route("/api/create", post(create_book))
|
||||||
|
.route("/api/update", post(update_book))
|
||||||
.route("/api/delete/:id", get(delete_book))
|
.route("/api/delete/:id", get(delete_book))
|
||||||
|
.route_layer(RequireAuthorizationLayer::<booksman_orm::AxumUser>::login())
|
||||||
.route("/api/list", get(list_book))
|
.route("/api/list", get(list_book))
|
||||||
.route("/api/list_search", get(list_search_book))
|
.route("/api/list_search", get(list_search_book))
|
||||||
.route("/api/list_users", get(list_users))
|
.route("/api/list_users", get(list_users))
|
||||||
.route("/api/create", post(create_book))
|
.route("/api/search_openlibrary", get(search_openlibrary))
|
||||||
.route("/api/update", post(update_book))
|
|
||||||
.route("/api/login", post(login_handler))
|
.route("/api/login", post(login_handler))
|
||||||
.route("/api/register", post(register_handler))
|
.route("/api/register", post(register_handler))
|
||||||
.route("/api/logout", post(logout_handler))
|
.route("/api/logout", post(logout_handler))
|
||||||
@@ -296,7 +297,7 @@ pub async fn main() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#[axum_macros::debug_handler]
|
//#[axum_macros::debug_handler]
|
||||||
async fn register_handler(Extension(ref conn): Extension<DatabaseConnection>,
|
async fn register_handler(Extension(ref conn): Extension<DatabaseConnection>,
|
||||||
Json(user_sent): Json<booksman_orm::AxumUser>) -> impl IntoResponse {
|
Json(user_sent): Json<booksman_orm::AxumUser>) -> impl IntoResponse {
|
||||||
// add to db
|
// add to db
|
||||||
@@ -305,9 +306,7 @@ Json(user_sent): Json<booksman_orm::AxumUser>) -> impl IntoResponse {
|
|||||||
user_name: Some(user_sent.clone().name),
|
user_name: Some(user_sent.clone().name),
|
||||||
password_hash: user_sent.clone().password_hash,
|
password_hash: user_sent.clone().password_hash,
|
||||||
};
|
};
|
||||||
let created_user = MutationCore::create_user(conn, user).await.expect("Failed to create user");
|
let _created_user = MutationCore::create_user(conn, user).await.expect("Failed to create user");
|
||||||
|
|
||||||
//auth.login(&user_sent_updated).await.unwrap();
|
|
||||||
return "success";
|
return "success";
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -317,9 +316,9 @@ async fn list_users(
|
|||||||
) -> impl IntoResponse {
|
) -> impl IntoResponse {
|
||||||
|
|
||||||
let usersmodels : Vec<user::Model> = QueryCore::list_all_users(&conn).await.unwrap_or(Vec::new());
|
let usersmodels : Vec<user::Model> = QueryCore::list_all_users(&conn).await.unwrap_or(Vec::new());
|
||||||
let mut users : Vec<User> = Vec::new();
|
let mut users : Vec<booksman_orm::AxumUser> = Vec::new();
|
||||||
for usermodel in usersmodels.iter() {
|
for usermodel in usersmodels.iter() {
|
||||||
let user = User{
|
let user = booksman_orm::AxumUser{
|
||||||
id: usermodel.id,
|
id: usermodel.id,
|
||||||
name: usermodel.user_name.clone().unwrap().clone(),
|
name: usermodel.user_name.clone().unwrap().clone(),
|
||||||
password_hash : "".to_string(),
|
password_hash : "".to_string(),
|
||||||
|
|||||||
Reference in New Issue
Block a user