This commit is contained in:
@ -38,7 +38,7 @@ impl FromRequest for CurrentUser {
|
||||
let user_actor: Addr<UsersActor> = user_actor.as_ref().clone();
|
||||
let identity: Identity = Identity::from_request(req, payload).into_inner()
|
||||
.expect("Failed to get identity!");
|
||||
let user_id = SessionIdentity(&identity).user_id();
|
||||
let user_id = SessionIdentity(Some(&identity)).user_id();
|
||||
|
||||
|
||||
Box::pin(async move {
|
||||
|
@ -1,4 +1,5 @@
|
||||
use actix_identity::Identity;
|
||||
use actix_web::{HttpMessage, HttpRequest};
|
||||
use serde::{Deserialize, Serialize};
|
||||
|
||||
use crate::data::user::{User, UserID};
|
||||
@ -26,11 +27,16 @@ pub struct SessionIdentityData {
|
||||
pub status: SessionStatus,
|
||||
}
|
||||
|
||||
pub struct SessionIdentity<'a>(pub &'a Identity);
|
||||
pub struct SessionIdentity<'a>(pub Option<&'a Identity>);
|
||||
|
||||
impl<'a> SessionIdentity<'a> {
|
||||
fn get_session_data(&self) -> Option<SessionIdentityData> {
|
||||
Self::deserialize_session_data(self.0.identity())
|
||||
if let Some(id) = self.0 {
|
||||
Self::deserialize_session_data(id.id().ok())
|
||||
}
|
||||
else {
|
||||
None
|
||||
}
|
||||
}
|
||||
|
||||
pub fn deserialize_session_data(data: Option<String>) -> Option<SessionIdentityData> {
|
||||
@ -54,14 +60,18 @@ impl<'a> SessionIdentity<'a> {
|
||||
res
|
||||
}
|
||||
|
||||
fn set_session_data(&self, data: &SessionIdentityData) {
|
||||
fn set_session_data(&self, req: &HttpRequest, data: &SessionIdentityData) {
|
||||
let s = serde_json::to_string(data).expect("Failed to serialize session data!");
|
||||
|
||||
self.0.remember(s);
|
||||
log::debug!("Will set user session data.");
|
||||
if let Err(e) = Identity::login(&req.extensions(), s) {
|
||||
log::error!("Failed to set session data! {}", e);
|
||||
}
|
||||
log::debug!("Did set user session data.");
|
||||
}
|
||||
|
||||
pub fn set_user(&self, user: &User) {
|
||||
self.set_session_data(&SessionIdentityData {
|
||||
pub fn set_user(&self, req: &HttpRequest, user: &User) {
|
||||
self.set_session_data(req, &SessionIdentityData {
|
||||
id: Some(user.uid.clone()),
|
||||
is_admin: user.admin,
|
||||
auth_time: time(),
|
||||
@ -69,10 +79,10 @@ impl<'a> SessionIdentity<'a> {
|
||||
});
|
||||
}
|
||||
|
||||
pub fn set_status(&self, status: SessionStatus) {
|
||||
pub fn set_status(&self, req: &HttpRequest, status: SessionStatus) {
|
||||
let mut sess = self.get_session_data().unwrap_or_default();
|
||||
sess.status = status;
|
||||
self.set_session_data(&sess);
|
||||
self.set_session_data(req, &sess);
|
||||
}
|
||||
|
||||
pub fn is_authenticated(&self) -> bool {
|
||||
|
Reference in New Issue
Block a user