身份验证
Starlette中的身份验证功能是通过AuthenticationMiddleware来提供的。AuthenticationMiddleware在配置是需要通过参数backend
提供一个继承了Authenticationbackend
基类的验证类。验证的结果会被保存在request.user
和request.auth
中。
继承AuthenticationMiddleware
类主要需要实现其中的async def authenticate(self, request) -> AuthCredentials, User
方法。该方法返回一个元组,第一个元素是验证结果标记,第二个元素是用户信息。
AuthCredentials
类通常用于存放验证结果标记,包括是否通过验证以及权限组合等。这些标记可以在Endpoint处使用@require()
修饰器进行过滤。@require()
修饰器除了可以接受一个字符串作为参数,还可以接受一个字符串数组作为参数,来进行标记的组合。默认情况下,验证不通过将会返回403错误,但是@require()
可以通过status_code
参数重新指定验证不通过时的错误号。
验证过程中抛出的异常,可以通过add_middleware()
中的参数on_error
来捕获处理。