身份验证

Starlette中的身份验证功能是通过AuthenticationMiddleware来提供的。AuthenticationMiddleware在配置是需要通过参数backend提供一个继承了Authenticationbackend基类的验证类。验证的结果会被保存在request.userrequest.auth中。

继承AuthenticationMiddleware类主要需要实现其中的async def authenticate(self, request) -> AuthCredentials, User方法。该方法返回一个元组,第一个元素是验证结果标记,第二个元素是用户信息。

AuthCredentials类通常用于存放验证结果标记,包括是否通过验证以及权限组合等。这些标记可以在Endpoint处使用@require()修饰器进行过滤。@require()修饰器除了可以接受一个字符串作为参数,还可以接受一个字符串数组作为参数,来进行标记的组合。默认情况下,验证不通过将会返回403错误,但是@require()可以通过status_code参数重新指定验证不通过时的错误号。

验证过程中抛出的异常,可以通过add_middleware()中的参数on_error来捕获处理。