用户认证(登录注册)
Masonite 使身份验证变得非常简单。
身份验证脚手架命令
Masonite 附带一个命令来搭建一个基本的身份验证系统。您可以将此作为向您的应用程序添加身份验证的一个很好的起点。该命令将为您创建控制器、视图和邮件。
如果您想从头开始实施自己的身份验证,您可以下面的部分开始
首先运行以下命令来添加新的文件:
python craft auth
然后在您的routes文件中添加认证路由:
from masonite.authentication import Auth
ROUTES = [
# routes
]
ROUTES += Auth.routes()
您可以访问 /login
或者 /register
路由来实现您的身份验证。
配置
Masonite认证的配置非常简单:
from app.User import User
GUARDS = {
"default": "web",
"web": {"model": User},
"password_reset_table": "password_resets",
"password_reset_expiration": 1440, # 单位为分钟。限制为24小时。如果不是None时
}
这里的默认 key 是用于身份验证的保护。“web”字典是web相关路由的保护配置。
登录验证
您可以使用' auth '类和' attempt '方法验证登录:
from masonite.authentication import Auth
from masonite.request import Request
def login(self, auth: Auth, request: Request):
user = auth.attempt(request.input('email'), request.input("password"))
现在将对用户登录进行身份验证,如果验证成功,则验证后的结果将是配置的模型。
如果验证失败,结果将是' None '。
如果您知道对应模型的主键,则可以通过id来获取:
from masonite.authentication import Auth
from masonite.request import Request
def login(self, auth: Auth, request: Request):
user = auth.attempt_by_id(1)
你可以注销当前用户:
from masonite.authentication import Auth
from masonite.request import Request
def logout(self, auth: Auth):
user = auth.logout()
用户信息
你可以获取当前经过身份验证的用户:
from masonite.authentication import Auth
from masonite.request import Request
def login(self, auth: Auth, request: Request):
user = auth.user() #== <app.User.User>
如果用户未通过身份验证,这将返回 None
。
路由
你可以使用 auth 类快速注册多个路由:
from masonite.authentication import Auth
ROUTES = [
#..
]
ROUTES += Auth.routes()
这将注册以下路由:
URI 地址 | 描述 |
---|---|
GET /login | 显示用户的登录表单 |
POST /login | 尝试为用户登录 |
GET /home | 登录尝试成功后的用户主页 |
GET /register | 显示用户的注册表单 |
POST /register | 保存发布的信息并创建一个新用户 |
GET /password_reset | 显示密码重置表单 |
POST /password_reset | 尝试重置用户密码 |
GET /change_password | 显示请求新密码的表单 |
POST /change_password | 请求新密码 |
Guards 警卫
Guards 是用于登录、注册和获取用户的封装逻辑。 Web Guard 使用 cookie
驱动程序设置一个名为 token
的 cookie,该 cookie 稍后用于获取用户。
你可以即时切换 Guards 以尝试对不同 Guards 进行身份验证:
from masonite.authentication import Auth
from masonite.request import Request
def login(self, auth: Auth, request: Request):
user = auth.guard("custom").attempt(request.input('email'), request.input("password")) #== <app.User.User>
本译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。