ユーザーがいくつかのルートの許可を持っているかどうかを確認する必要があります。3 つの「スコープ」(ゲスト、認証ユーザー、管理者) を作成しましたが、ユーザーがこれらのルートにアクセスできるかどうかを確認する方法がわかりません。
認証ミドルウェアを実装しようとしていますが、このミドルウェアは、ユーザーが正しい Cookie またはトークンを持っているかどうかを確認する必要があります。(リクエスト ヘッダーから Cookie を出力することはできます) が、インポート方法、actix_identity の使用方法、およびこのミドルウェア内の id パラメータへのアクセス方法がわかりません。
私の問題は Actix-identity に関するものだけではないと思いますが、ミドルウェア内でパラメーターを渡すことができません。
#[actix_rt::main]
async fn main() -> std::io::Result<()> {
let cookie_key = conf.server.key;
// Register http routes
let mut server = HttpServer::new(move || {
App::new()
// Enable logger
.wrap(Logger::default())
.wrap(IdentityService::new(
CookieIdentityPolicy::new(cookie_key.as_bytes())
.name("auth-cookie")
.path("/")
.secure(false),
))
//limit the maximum amount of data that server will accept
.data(web::JsonConfig::default().limit(4096))
//normal routes
.service(web::resource("/").route(web::get().to(status)))
// .configure(routes)
.service(
web::scope("/api")
// guest endpoints
.service(web::resource("/user_login").route(web::post().to(login)))
.service(web::resource("/user_logout").route(web::post().to(logout)))
// admin endpoints
.service(
web::scope("/admin")
// .wrap(AdminAuthMiddleware)
.service(
web::resource("/create_admin").route(web::post().to(create_admin)),
)
.service(
web::resource("/delete_admin/{username}/{_:/?}")
.route(web::delete().to(delete_admin)),
),
)
//user auth routes
.service(
web::scope("/auth")
// .wrap(UserAuthMiddleware)
.service(web::resource("/get_user").route(web::get().to(get_user))),
),
)
});
// Enables us to hot reload the server
let mut listenfd = ListenFd::from_env();
server = if let Some(l) = listenfd.take_tcp_listener(0).unwrap() {
server.listen(l)?
} else {
server.bind(ip)?
};
server.run().await
私が試したリソース:
Actix API の認証ミドルウェアの作成 https://www.jamesbaum.co.uk/blether/creating-authentication-middleware-actix-rust-react/
ミドルウェアでの Actix-web トークンの検証https://users.rust-lang.org/t/actix-web-token-validation-in-middleware/38205
Actix ミドルウェアの例https://github.com/actix/examples/tree/master/middleware
たぶん私は完全に間違っていると思います.auth-middlewareは私の問題に対する最良の解決策ではありません. 「保護されたルート」の作成にご協力いただければ幸いです