如果警卫失败,如何重定向
我正在使用守卫来验证用户身份。
如果防护失败,我如何轻松地将用户重定向到登录页面(在我的示例中重定向到 /login)?
#[rocket::async_trait]
impl<'r> FromRequest<'r> for User {
type Error = ();
async fn from_request(request: &'r Request<'_>) -> Outcome<User, ()> {
let db = request.guard::<&State<Db>>().await.succeeded().unwrap();
/* Get user_id cookie */
let c = request.cookies().get_private("user_id");
match c {
Some(c) => {
...
Outcome::Success(user)
},
None => {
Outcome::Failure((Status::BadRequest, ()))
}
}
}
}
#[get("/")]
async fn home(user: User) -> Template {
...
}
#[get("/login")]
async fn login() -> Template {
...
}
I'm using a guard to authenticated a user.
How can i easily redirect the user to the login page if a guard fail (redirect to /login in my example) ?
#[rocket::async_trait]
impl<'r> FromRequest<'r> for User {
type Error = ();
async fn from_request(request: &'r Request<'_>) -> Outcome<User, ()> {
let db = request.guard::<&State<Db>>().await.succeeded().unwrap();
/* Get user_id cookie */
let c = request.cookies().get_private("user_id");
match c {
Some(c) => {
...
Outcome::Success(user)
},
None => {
Outcome::Failure((Status::BadRequest, ()))
}
}
}
}
#[get("/")]
async fn home(user: User) -> Template {
...
}
#[get("/login")]
async fn login() -> Template {
...
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
AS doc Illine:
As doc illustrate:
注册 401 捕手:
https://api .rocket.rs/v0.5-rc/rocket/struct.Rocket.html#method.register
Register a 401 catcher:
https://api.rocket.rs/v0.5-rc/rocket/struct.Rocket.html#method.register