Skip to content

Commit 0266cdd

Browse files
authored
Merge pull request #20 from caitlingao/fix-login-panicked
fix: use doesn't exist to login panicked
2 parents bb25476 + 67dc81a commit 0266cdd

File tree

1 file changed

+26
-22
lines changed

1 file changed

+26
-22
lines changed

src/models/user.rs

Lines changed: 26 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,7 @@
11
use crate::{
22
config::db::Connection,
33
constants,
4-
models::{
5-
login_history::LoginHistory,
6-
user_token::UserToken,
7-
},
4+
models::{login_history::LoginHistory, user_token::UserToken},
85
schema::users::{self, dsl::*},
96
};
107
use bcrypt::{hash, verify, DEFAULT_COST};
@@ -49,34 +46,37 @@ impl User {
4946
password: hashed_pwd,
5047
..user
5148
};
52-
diesel::insert_into(users)
53-
.values(&user)
54-
.execute(conn);
49+
diesel::insert_into(users).values(&user).execute(conn);
5550
Ok(constants::MESSAGE_SIGNUP_SUCCESS.to_string())
5651
} else {
5752
Err(format!("User '{}' is already registered", &user.username))
5853
}
5954
}
6055

6156
pub fn login(login: LoginDTO, conn: &Connection) -> Option<LoginInfoDTO> {
62-
let user_to_verify = users
57+
if let Ok(user_to_verify) = users
6358
.filter(username.eq(&login.username_or_email))
6459
.or_filter(email.eq(&login.username_or_email))
6560
.get_result::<User>(conn)
66-
.unwrap();
67-
if !user_to_verify.password.is_empty()
68-
&& verify(&login.password, &user_to_verify.password).unwrap()
6961
{
70-
if let Some(login_history) = LoginHistory::create(&user_to_verify.username, conn) {
71-
if LoginHistory::save_login_history(login_history, conn).is_err() {
72-
return None;
73-
}
74-
let login_session_str = User::generate_login_session();
75-
if User::update_login_session_to_db(&user_to_verify.username, &login_session_str, conn) {
76-
return Some(LoginInfoDTO {
77-
username: user_to_verify.username,
78-
login_session: login_session_str,
79-
});
62+
if !user_to_verify.password.is_empty()
63+
&& verify(&login.password, &user_to_verify.password).unwrap()
64+
{
65+
if let Some(login_history) = LoginHistory::create(&user_to_verify.username, conn) {
66+
if LoginHistory::save_login_history(login_history, conn).is_err() {
67+
return None;
68+
}
69+
let login_session_str = User::generate_login_session();
70+
if User::update_login_session_to_db(
71+
&user_to_verify.username,
72+
&login_session_str,
73+
conn,
74+
) {
75+
return Some(LoginInfoDTO {
76+
username: user_to_verify.username,
77+
login_session: login_session_str,
78+
});
79+
}
8080
}
8181
}
8282
}
@@ -106,7 +106,11 @@ impl User {
106106
Uuid::new_v4().to_simple().to_string()
107107
}
108108

109-
pub fn update_login_session_to_db(un: &str, login_session_str: &str, conn: &Connection) -> bool {
109+
pub fn update_login_session_to_db(
110+
un: &str,
111+
login_session_str: &str,
112+
conn: &Connection,
113+
) -> bool {
110114
if let Ok(user) = User::find_user_by_username(un, conn) {
111115
diesel::update(users.find(user.id))
112116
.set(login_session.eq(login_session_str.to_string()))

0 commit comments

Comments
 (0)