Skip to content

Commit 336f58a

Browse files
Merge pull request #79 from hubertshelley/fix/session_err
fix: session异常修复
2 parents 2609ce7 + d2c089d commit 336f58a

File tree

4 files changed

+27
-25
lines changed

4 files changed

+27
-25
lines changed

silent/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ version.workspace = true
1818
default = ["server", "test", ]
1919
full = ["admin", "server", "multipart", "upgrade", "sse", "security", "static", "session", "cookie", "template", "test", "scheduler", "grpc"]
2020
admin = ["server", "sse", "template", "session"]
21-
server = ["tokio/net", "tokio/rt-multi-thread", "tokio/signal"]
21+
server = ["tokio/fs", "tokio/net", "tokio/rt-multi-thread", "tokio/signal"]
2222
upgrade = ["dep:tokio-tungstenite"]
2323
multipart = ["tokio/fs", "dep:multer", "dep:multimap", "dep:tempfile", "dep:textnonce"]
2424
sse = ["dep:pin-project", "dep:tokio-stream"]

silent/src/core/socket_addr.rs

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,26 @@
1-
use std::fmt::{Display, Formatter};
1+
use std::fmt::{Debug, Display, Formatter};
22
use std::str::FromStr;
33

4-
#[derive(Clone, Debug)]
4+
#[derive(Clone)]
55
pub enum SocketAddr {
66
TcpSocketAddr(std::net::SocketAddr),
77
UnixSocketAddr(std::os::unix::net::SocketAddr),
88
}
99

10+
impl Debug for SocketAddr {
11+
fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
12+
match self {
13+
SocketAddr::TcpSocketAddr(addr) => write!(f, "http://{}", addr),
14+
SocketAddr::UnixSocketAddr(addr) => write!(f, "UnixSocketAddr({:?})", addr),
15+
}
16+
}
17+
}
18+
1019
impl Display for SocketAddr {
1120
fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
1221
match self {
1322
#[allow(clippy::write_literal)]
14-
SocketAddr::TcpSocketAddr(addr) => write!(f, "http{}//{:?}", ':', addr),
23+
SocketAddr::TcpSocketAddr(addr) => write!(f, "{}", addr),
1524
SocketAddr::UnixSocketAddr(addr) => {
1625
write!(f, "{:?}", addr.as_pathname())
1726
}
@@ -57,7 +66,7 @@ mod tests {
5766
fn test_socket_addr() {
5867
let addr = std::net::SocketAddr::from(([127, 0, 0, 1], 8080));
5968
let socket_addr = SocketAddr::from(addr);
60-
assert_eq!(format!("{}", socket_addr), "http://127.0.0.1:8080");
69+
assert_eq!(format!("{}", socket_addr), "127.0.0.1:8080");
6170

6271
let _ = std::fs::remove_file("/tmp/sock");
6372
let addr = std::os::unix::net::SocketAddr::from_pathname("/tmp/sock").unwrap();

silent/src/route/root.rs

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -72,9 +72,6 @@ impl RootRoute {
7272
pub(crate) fn hook_first(&mut self, handler: impl MiddleWareHandler + 'static) {
7373
let handler = Arc::new(handler);
7474
self.middlewares.insert(0, handler.clone());
75-
self.children
76-
.iter_mut()
77-
.for_each(|r| r.middleware_hook_first(handler.clone()));
7875
}
7976

8077
pub(crate) fn set_configs(&mut self, configs: Option<Configs>) {

silent/src/session/middleware.rs

Lines changed: 13 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,4 @@
1-
use crate::{
2-
CookieExt, Handler, MiddleWareHandler, Next, Request, Response, SilentError, StatusCode,
3-
};
1+
use crate::{CookieExt, Handler, MiddleWareHandler, Next, Request, Response};
42
use async_session::{MemoryStore, Session, SessionStore};
53
use async_trait::async_trait;
64
use cookie::{Cookie, CookieJar};
@@ -41,25 +39,23 @@ where
4139
let cookie = cookies.get("silent-web-session");
4240
let session_store = self.session_store.read().await;
4341
let mut session_key_exists = false;
44-
let cookie_value = if cookie.is_some() {
42+
let mut cookie_value = if cookie.is_some() {
4543
session_key_exists = true;
4644
cookie.unwrap().value().to_string()
4745
} else {
4846
session_store.store_session(Session::new()).await?.unwrap()
4947
};
50-
let session = session_store
51-
.load_session(cookie_value.clone())
52-
.await
53-
.map_err(|e| {
54-
SilentError::business_error(
55-
StatusCode::INTERNAL_SERVER_ERROR,
56-
format!("Failed to load session: {}", e),
57-
)
58-
})?
59-
.ok_or(SilentError::business_error(
60-
StatusCode::INTERNAL_SERVER_ERROR,
61-
"Failed to load session",
62-
))?;
48+
let session =
49+
if let Ok(Some(session)) = session_store.load_session(cookie_value.clone()).await {
50+
session
51+
} else {
52+
session_key_exists = false;
53+
cookie_value = session_store.store_session(Session::new()).await?.unwrap();
54+
session_store
55+
.load_session(cookie_value.clone())
56+
.await?
57+
.unwrap()
58+
};
6359
req.extensions_mut().insert(session.clone());
6460
let session_copied = session.clone();
6561
if !session_key_exists {

0 commit comments

Comments
 (0)