1 个不稳定版本
0.0.1 | 2020年1月19日 |
---|
#209 在 #futures
1.5MB
32K SLoC
请求 Scrappy 应用程序的认证服务。
IdentityService 中间件可以与不同的策略类型一起使用以存储身份信息。
默认情况下,只实现了 Cookie 身份策略。其他后端实现可以单独添加。
CookieIdentityPolicy 使用 Cookie 作为身份存储。
要访问当前请求的身份,应使用 Identity 提取器。
use scrappy::*;
use scrappy_identity::{Identity, CookieIdentityPolicy, IdentityService};
async fn index(id: Identity) -> String {
// access request identity
if let Some(id) = id.identity() {
format!("Welcome! {}", id)
} else {
"Welcome Anonymous!".to_owned()
}
}
async fn login(id: Identity) -> HttpResponse {
id.remember("User1".to_owned()); // <- remember identity
HttpResponse::Ok().finish()
}
async fn logout(id: Identity) -> HttpResponse {
id.forget(); // <- remove identity
HttpResponse::Ok().finish()
}
fn main() {
let app = App::new().wrap(IdentityService::new(
// <- create identity middleware
CookieIdentityPolicy::new(&[0; 32]) // <- create cookie identity policy
.name("auth-cookie")
.secure(false)))
.service(web::resource("/index.html").to(index))
.service(web::resource("/login.html").to(login))
.service(web::resource("/logout.html").to(logout));
}
依赖项
~34MB
~775K SLoC