身份验证
用户密码身份验证
Loco
简化了用户身份验证过程,使您能够快速搭建新网站。此功能不仅节省时间,还提供了专注于构建应用程序核心逻辑的灵活性。
身份验证配置
auth
功能是库的默认配置。如果需要,您可以关闭它并手动处理身份验证。
SaaS 应用快速入门
使用 loco cli 创建您的应用,并选择 SaaS app (with DB and user auth)
选项。
要探索开箱即用的身份验证控制器,请运行以下命令:
$ cargo loco routes
.
.
.
[POST] /api/auth/forgot
[POST] /api/auth/login
[POST] /api/auth/register
[POST] /api/auth/reset
[GET] /api/auth/verify
[GET] /api/auth/current
.
.
.
注册新用户
/api/auth/register
端点在数据库中创建一个新用户,并带有用于账户验证的 email_verification_token
。一封包含验证链接的欢迎邮件将发送给用户。
Curl 请求示例:
curl --location '127.0.0.1:5150/api/auth/register' \
--header 'Content-Type: application/json' \
--data-raw '{
"name": "Loco user",
"email": "user@loco.rs",
"password": "12341234"
}'
出于安全原因,如果用户已注册,则不会创建新用户,并返回 200 状态码,且不会泄露用户邮箱详细信息。
登录
注册新用户后,使用以下请求登录:
Curl 请求示例:
curl --location '127.0.0.1:5150/api/auth/login' \
--header 'Content-Type: application/json' \
--data-raw '{
"email": "user@loco.rs",
"password": "12341234"
}'
响应包含用于身份验证的 JWT token、用户 ID、姓名和验证状态。
{
"token": "...",
"pid": "2b20f998-b11e-4aeb-96d7-beca7671abda",
"name": "Loco user",
"is_verified": false
}
- Token: JWT token,用于向身份验证端点发出请求。请参阅 配置文档 以自定义默认 token 过期时间,并确保不同环境中使用不同的 secret。
- pid - 创建新用户时生成的唯一标识符。
- Name - 与账户关联的用户名。
- Is Verified - 标志,指示用户是否已验证其账户。
账户验证
用户注册后,将发送一封包含验证链接的电子邮件。访问此链接会更新数据库中的 email_verified_at
字段,并将登录响应中的 is_verified
标志更改为 true。
Curl 请求示例:
curl --location --request GET '127.0.0.1:5150/api/auth/verify/TOKEN' \
--header 'Content-Type: application/json'
重置密码流程
忘记密码
forgot
端点只需要请求体中包含用户的邮箱。将发送一封包含重置密码链接的电子邮件,并在数据库中设置 reset_token
。
Curl 请求示例:
curl --location '127.0.0.1:5150/api/auth/forgot' \
--header 'Content-Type: application/json' \
--data-raw '{
"email": "user@loco.rs"
}'
重置密码
要重置密码,请发送在 forgot
端点生成的 token 以及新密码。
Curl 请求示例:
curl --location '127.0.0.1:5150/api/auth/reset' \
--header 'Content-Type: application/json' \
--data '{
"token": "TOKEN",
"password": "new-password"
}'
获取当前用户
此端点受 auth 中间件保护。
curl --location --request GET '127.0.0.1:5150/api/auth/current' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer TOKEN'
创建经过身份验证的端点
要建立一个经过身份验证的端点,请从 loco_rs
库导入 controller::middleware
,并将 auth 中间件合并到函数端点参数中。
请考虑以下 Rust 示例:
use axum::{extract::State, Json};
use loco_rs::{
app::AppContext,
controller::middleware,
Result,
};
async fn current(
auth: middleware::auth::Auth,
State(ctx): State<AppContext>,
) -> Result<Response> {
let user = users::Model::find_by_pid(&ctx.db, &auth.claims.pid).await?;
}
API 身份验证
创建新应用
这次,让我们使用 loco cli 创建您的 rest 应用,并选择 Rest app
选项。
要创建新应用,请运行以下命令并按照说明操作:
$ loco new
要探索开箱即用的身份验证控制器,请运行以下命令:
$ cargo loco routes
.
.
.
[POST] /api/auth/forgot
[POST] /api/auth/login
[POST] /api/auth/register
[POST] /api/auth/reset
[GET] /api/auth/verify
[GET] /api/auth/current
.
.
.
注册新用户
/api/auth/register
端点在数据库中创建一个新用户,并带有用于请求身份验证的 api_key
。 api_key
将在未来的请求中用于身份验证。
Curl 请求示例:
curl --location '127.0.0.1:5150/api/auth/register' \
--header 'Content-Type: application/json' \
--data-raw '{
"name": "Loco user",
"email": "user@loco.rs",
"password": "12341234"
}'
注册新用户后,请确保在数据库中看到新用户的 api_key
。
使用 API 身份验证创建经过身份验证的端点
要设置 API 身份验证的端点,请从 loco_rs 库导入 controller::middleware
,并将 auth 中间件通过 middleware::auth::ApiToken
包含在函数端点参数中。
请考虑以下 Rust 示例:
use loco_rs::prelude::*;
use loco_rs::controller::middleware;
use crate::{models::_entities::users, views::user::CurrentResponse};
async fn current_by_api_key(
auth: middleware::auth::ApiToken<users::Model>,
State(_ctx): State<AppContext>,
) -> Result<Response> {
format::json(CurrentResponse::new(&auth.user))
}
pub fn routes() -> Routes {
Routes::new()
.prefix("user")
.add("/current-api", get(current_by_api_key))
}
请求 API 身份验证的端点
要请求经过身份验证的端点,您需要在 Authorization
标头中传递 API_KEY
。
Curl 请求示例:
curl --location '127.0.0.1:5150/api/user/current-api' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer API_KEY'
如果 API_KEY
有效,您将收到包含用户详细信息的响应。