在创建了应用程序的基本版本后,蝙蝠侠想要限制对哥谭警察局的访问。因此,他询问了 Robyn 中的身份验证功能。
身份验证
正如蝙蝠侠发现的那样,Robyn 提供了一种向应用程序添加身份验证中间件的简单方法。然后,您可以在路由中指定 auth_required=True,以使它们仅供经过身份验证的用户访问。
py
# GET /hello_world
@app.get("/auth", auth_required=True)
async def auth(request: Request):
# 仅当用户通过身份验证后,才会执行此路由方法
# 否则将返回 401 响应
return "Hello, world"
py
# GET /hello_world
@app.get("/auth", auth_required=True)
async def auth(request: Request):
# 仅当用户通过身份验证后,才会执行此路由方法
# 否则将返回 401 响应
return "Hello, world"
要添加身份验证中间件,可以使用 configure_authentication
方法。此方法需要一个 AuthenticationHandler
对象作为参数。该对象指定如何验证用户,并使用 TokenGetter
对象从请求中检索令牌。Robyn 目前确实提供了一个 BearerGetter
类,该类使用 Bearer
方案从 Authorization
标头获取令牌。以下是基本身份验证处理程序的示例:
py
# GET /hello_world
class BasicAuthHandler(AuthenticationHandler):
def authenticate(self, request: Request) -> Optional[Identity]:
token = self.token_getter.get_token(request)
if token == "valid":
return Identity(claims={})
return None
app.configure_authentication(BasicAuthHandler(token_getter=BearerGetter()))
py
# GET /hello_world
class BasicAuthHandler(AuthenticationHandler):
def authenticate(self, request: Request) -> Optional[Identity]:
token = self.token_getter.get_token(request)
if token == "valid":
return Identity(claims={})
return None
app.configure_authentication(BasicAuthHandler(token_getter=BearerGetter()))
如果用户通过了身份验证,则 authenticate 方法应该返回 Identity 对象,否则返回 None。Identity 对象可以包含您想要的任何数据,并且可以使用 request.identity 属性在路由方法中访问。
提示
该身份验证系统基本上只使用后台的请求中间件。
这意味着您可以忽略它并使用中间件创建自己的身份验证系统(如果您愿意)。但是,Robyn 仍然提供了这种易于实施的解决方案,应该适合大多数用例。
下一步是什么?
现在,蝙蝠侠已经了解了身份验证,他想知道一些可以用来提高应用程序速度的优化技术。他发现了以下功能