a simple loginmanager on actix web
toml
actix-web = "^4"
serde = {version="^1.0", features = ["derive"] }
serde_json = "^1.0"
rust-crypto = "^0.2"
```rust use std::pin::Pin; use actixweb::{get, web, App, HttpRequest, HttpResponse, HttpServer}; use actixloginmanager as loginmanager; use loginmanager::{CookieSession, LoginManager, UserMinix, UserWrap};
use futures::Future; use loginmanagercodegen::loginrequired;
use futures::{future, future::Ready};
struct User { id: i32, name: &'static str, }
impl UserMinix for User {
type Future = Pin
fn get_id(&self) -> &Self::Key {
&self.id
}
}
const USERS: [User; 3] = [ User { id: 1, name: "Tom" }, User { id: 2, name: "Jerry" }, User { id: 3, name: "Spike" }, ];
async fn hello() -> impl actix_web::Responder { return format!("hello {}",user.name); }
async fn autologin(req: HttpRequest) -> impl actixweb::Responder { let user = UserWrap::from(USERS[0].clone()); loginmanager::login(&user, &req); HttpResponse::Ok().body(format!("login:{:?} ", user.user().name)) }
async fn logout(req: HttpRequest, UserWrap(user): UserWrap
async fn index(UserWrap(user): UserWrap
async fn main() { HttpServer::new(|| { App::new() .wrap(LoginManager::new( CookieSession::new(&[0; 32]).secure(false), )) .service(index) .route("/hello", web::get().to(hello)) .route("/login", web::get().to(auto_login)) .route("/logout", web::get().to(logout)) }) .bind("0.0.0.0:7081") .unwrap() .run() .await .unwrap(); } ```