mirror of
https://github.com/storytold/artcraft.git
synced 2026-11-03 17:08:13 +00:00
use UserToken in an existing flow
This commit is contained in:
1 parent
b1d5244620
commit
b9e2c87025
5 files changed
+34
-7
No files matched your search
+6
-1
@@ -7,7 +7,12 @@ pub async fn lookup_user_for_login_by_email(email: &str, pool: &MySqlPool) -> An
|
||||
let record = sqlx::query_as!(
|
||||
UserRecordForLogin,
|
||||
r#"
|
||||
SELECT token, username, email_address, password_hash, is_banned
|
||||
SELECT
|
||||
token as `token: tokens::users::user::UserToken`,
|
||||
username,
|
||||
email_address,
|
||||
password_hash,
|
||||
is_banned
|
||||
FROM users
|
||||
WHERE email_address = ?
|
||||
LIMIT 1
|
||||
|
||||
+6
-1
@@ -8,7 +8,12 @@ pub async fn lookup_user_for_login_by_username(username: &str, pool: &MySqlPool)
|
||||
let record = sqlx::query_as!(
|
||||
UserRecordForLogin,
|
||||
r#"
|
||||
SELECT token, username, email_address, password_hash, is_banned
|
||||
SELECT
|
||||
token as `token: tokens::users::user::UserToken`,
|
||||
username,
|
||||
email_address,
|
||||
password_hash,
|
||||
is_banned
|
||||
FROM users
|
||||
WHERE username = ?
|
||||
LIMIT 1
|
||||
|
||||
@@ -1,7 +1,9 @@
|
||||
use tokens::users::user::UserToken;
|
||||
|
||||
/// Shared result type for user lookups for login (via email or username)
|
||||
#[derive(Debug)]
|
||||
pub struct UserRecordForLogin {
|
||||
pub token: String,
|
||||
pub token: UserToken,
|
||||
pub username: String,
|
||||
pub email_address: String,
|
||||
pub password_hash: Vec<u8>,
|
||||
|
||||
@@ -3,12 +3,27 @@ use serde::{Deserializer, Serializer};
|
||||
use sqlx_core::database::{Database, HasValueRef};
|
||||
use sqlx_core::decode::Decode;
|
||||
use std::error::Error;
|
||||
use std::fmt::{Debug, Display, Formatter};
|
||||
|
||||
#[derive(Clone, PartialEq, Eq, Debug, sqlx::Type)]
|
||||
#[derive(Clone, PartialEq, Eq, sqlx::Type)]
|
||||
pub struct UserToken {
|
||||
pub value: String,
|
||||
}
|
||||
|
||||
// TODO: Macros should implement all of the following:
|
||||
|
||||
impl Display for UserToken {
|
||||
fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
|
||||
write!(f, "{}", self.value)
|
||||
}
|
||||
}
|
||||
|
||||
impl Debug for UserToken {
|
||||
fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
|
||||
write!(f, "{}", self.value)
|
||||
}
|
||||
}
|
||||
|
||||
impl serde::Serialize for UserToken {
|
||||
fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
|
||||
serializer.serialize_str(&self.value)
|
||||
|
||||
@@ -137,7 +137,7 @@ pub async fn login_handler(
|
||||
let ip_address = get_request_ip(&http_request);
|
||||
|
||||
let create_session_result =
|
||||
create_user_session(&user.token, &ip_address, &mysql_pool).await;
|
||||
create_user_session(&user.token.value, &ip_address, &mysql_pool).await;
|
||||
|
||||
let session_token = match create_session_result {
|
||||
Ok(token) => token,
|
||||
@@ -147,9 +147,9 @@ pub async fn login_handler(
|
||||
}
|
||||
};
|
||||
|
||||
info!("login session created");
|
||||
info!("login session created for user: {}", &user.token);
|
||||
|
||||
let session_cookie = match session_cookie_manager.create_cookie(&session_token, &user.token) {
|
||||
let session_cookie = match session_cookie_manager.create_cookie(&session_token, &user.token.value) {
|
||||
Ok(cookie) => cookie,
|
||||
Err(_) => return Err(LoginErrorResponse::server_error()),
|
||||
};
|
||||
|
||||
Reference in new issue
Block a user