8 个不稳定版本 (3 个破坏性更新)
0.4.0 | 2021 年 8 月 24 日 |
---|---|
0.3.0 | 2021 年 4 月 25 日 |
0.2.1 | 2021 年 4 月 2 日 |
0.2.0 | 2021 年 3 月 31 日 |
0.1.3 | 2021 年 3 月 29 日 |
#5 in #create-user
76KB
1.5K SLoC
rocket_auth
rocket_auth 为认证管理提供了一个后端无关的、可直接使用的 API。它支持 SQLite 和 Postgresql 的连接。它允许您创建、删除和认证用户。提供的功能包括
sqlx-sqlite
:用于使用sqlx
与 SQLite 数据库交互。sqlx-postgres
:用于使用sqlx
与 Postgresql 数据库交互。sqlx-mysql
:用于使用sqlx
与 MySql 数据库交互。redis
:用于使用redis
在 redis 服务器上存储会话。rusqlite
:用于使用rusqlite
与 SQLite 数据库交互。tokio-postgres
:用于使用tokio-postgres
与 Postgresql 数据库交互。
rocket_auth
使用私有饼干来存储会话数据。这意味着为了在启动之间正确解密饼干,必须设置一个 secret_key
。有关更多信息,请访问 Rocket 的 配置指南。
要使用 rocket_auth
,请将其作为依赖项包含在您的 Cargo.toml 文件中
[dependencies.rocket_auth]
version = "0.4.0"
features = ["sqlx-sqlite"]
快速概述
该软件包提供了三个守卫
Auth
:管理认证。Session
:用于从客户端饼干检索会话数据。User
:用于限制内容,使其只能由认证客户端查看。
它还包括两个结构,用于解析表单和 JSON 数据
Signup
:用于创建新用户。Login
:用于认证用户。
最后,它有两个查询结构
Users
:允许查询数据库中的用户。User
:是查询的响应。
Auth
守卫允许登录、注销、注册、修改和删除当前(未)认证用户。有关更多信息,请参阅 Auth
。一个工作示例
use rocket::{get, post, form::Form, routes};
use rocket_auth::{Users, Error, Auth, Signup, Login};
#[post("/signup", data="<form>")]
async fn signup(form: Form<Signup>, auth: Auth<'_>) -> Result<&'static str, Error> {
auth.signup(&form).await?;
auth.login(&form.into());
Ok("You signed up.")
}
#[post("/login", data="<form>")]
async fn login(form: Form<Login>, auth: Auth<'_>) -> Result<&'static str, Error>{
auth.login(&form).await?;
Ok("You're logged in.")
}
#[get("/logout")]
fn logout(auth: Auth<'_>) {
auth.logout();
}
#[tokio::main]
async fn main() -> Result<(), Error>{
let users = Users::open_sqlite("mydb.db").await?;
rocket::build()
.mount("/", routes![signup, login, logout])
.manage(users)
.launch();
Ok(())
}
Users 结构体
Users
结构体管理与数据库的交互。它允许您查询、创建、修改和删除用户。与 Auth
守卫不同,Users
实例可以管理数据库中的任何用户。请注意,Auth
守卫包含存储在公共 users
字段上的 Users
实例。因此,在使用 Auth
时不需要检索 Users。以下是一个使用 Users
结构体查询用户的简单示例
use rocket_auth::Users;
#[get("/see-user/<id>")]
async fn see_user(id: i32, users: &State<Users>) -> String {
let user = users.get_by_id(id).await.unwrap();
format!("{}", json!(user))
}
可以通过使用 open_sqlite
和 open_postgres
方法将 Users
实例与数据库连接起来。此外,还可以从一个工作连接中构造它。
用户守卫
User
守卫可用于限制内容,使其只能由经过身份验证的用户查看。此外,您还可以使用它来根据客户端是否经过身份验证渲染特殊内容。
#[get("/private-content")]
fn private_content(user: User) -> &'static str {
"If you can see this, you are logged in."
}
#[get("/special-content")]
fn special_content(option: Option<User>) -> String {
if let Some(user) = option {
format!("hello, {}.", user.email())
} else {
"hello, anonymous user".into()
}
}
#[get("/admins-only")]
fn admins_only(user: AdminUser) -> &'static str {
"Hello administrator."
}
管理员用户守卫
AdminUser
守卫可以像 User
一样使用。它将限制内容,使其只能由管理员查看。
# use rocket::*;
# use rocket_auth::AdminUser;
#[get("/admin-panel")]
fn admin_panel(user: AdminUser) -> String {
format!("Hello {}.", user.email());
}
依赖关系
~22–59MB
~1M SLoC