1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
//! 无密码认证模块
//!
//! 提供多种无密码认证方式,包括魔法链接 (Magic Link) 和一次性密码 (OTP)。
//!
//! ## 功能特性
//!
//! - **Magic Link**: 生成安全的一次性登录链接,通过邮件发送给用户
//! - **Email OTP**: 生成数字验证码,通过邮件发送
//! - **SMS OTP**: 生成数字验证码,通过短信发送
//!
//! ## 设计原则
//!
//! 本模块只负责 Token/OTP 的生成和验证逻辑,**不包含**实际的邮件/短信发送功能。
//! 发送功能应该由应用层通过集成第三方服务(如 SendGrid、Twilio 等)来实现。
//!
//! ## 示例
//!
//! ### Magic Link 认证
//!
//! ```rust
//! # tokio::runtime::Runtime::new().unwrap().block_on(async {
//! use authrs::passwordless::{MagicLinkManager, MagicLinkConfig};
//!
//! // 创建管理器
//! let manager = MagicLinkManager::new(MagicLinkConfig::default());
//!
//! // 为用户生成魔法链接 token
//! let token_data = manager.generate("user@example.com").await.unwrap();
//!
//! // 构建完整的魔法链接 URL(应用层负责)
//! let login_url = format!(
//! "https://example.com/auth/magic?token={}",
//! token_data.token
//! );
//!
//! // 发送邮件(应用层负责)
//! // send_email(user_email, login_url);
//!
//! // 用户点击链接后,验证 token
//! match manager.verify(&token_data.token).await {
//! Ok(email) => println!("验证成功,用户: {}", email),
//! Err(e) => println!("验证失败: {}", e),
//! }
//! # });
//! ```
//!
//! ### Email/SMS OTP 认证
//!
//! ```rust
//! # tokio::runtime::Runtime::new().unwrap().block_on(async {
//! use authrs::passwordless::{OtpManager, OtpConfig, OtpPurpose};
//!
//! // 创建管理器
//! let manager = OtpManager::new(OtpConfig::default());
//!
//! // 生成 OTP
//! let otp_data = manager
//! .generate("user@example.com", OtpPurpose::Login)
//! .await
//! .unwrap();
//!
//! // 发送 OTP(应用层负责)
//! // send_email(user_email, otp_data.code);
//! // 或 send_sms(user_phone, otp_data.code);
//!
//! // 用户输入验证码后,验证 OTP
//! match manager
//! .verify("user@example.com", "123456", OtpPurpose::Login)
//! .await
//! {
//! Ok(()) => println!("验证成功"),
//! Err(e) => println!("验证失败: {}", e),
//! }
//! # });
//! ```
//!
//! ## 安全考虑
//!
//! - Magic Link token 使用密码学安全的随机数生成
//! - OTP 验证使用常量时间比较,防止时序攻击
//! - 支持配置过期时间和最大尝试次数
//! - Token/OTP 使用后自动失效(一次性使用)
//! - 支持速率限制集成
pub use ;
pub use ;