赞
踩
from sanic_jwt import Initialize
async def authenticate(request):
return dict(user_id='some_id')
app = Sanic(__name__)
Initialize(app, authenticate=authenticate)
curl -X POST http://localhost:8000/auth
curl -X GET -H "Authorization: Bearer <JWT>" http://localhost:8000/auth/verify
pip install sanic-jwt
app.add_route(ProtectedView.as_view(), '/protected')
sanicjwt = Initialize(app)
@sanicjwt.protected()
async def protected_route(request):
bp = Blueprint('Users')
@bp.protected()
async def users(request, id):
scope: user:read:write
namespace: user
action: [read, write]
# **需要user的scope
@scoped('user')
# **需要user和admin的scope
@scoped(['user', 'admin'])
# **需要user或admin的scope
@scoped(['user', 'admin'], False)
# **Blueprint中使用
bp = Blueprint('Users')
Initialize(bp)
@bp.get('/users/<id>')
@scoped(['user', 'admin'], initialized_on=bp)
async def users(request, id):
...
- 参数(Parameters)
- scopes:必须
- 字符串
- 字符串列表
- 返回上述值的同步/异步函数
- requires_all:默认true,可选。true表示需要匹配所有的scope,false表示只匹配其中之一即可
- require_all_actions:默认true,可选。true表示需要匹配所有的action,false表示只匹配其中之一即可
- 处理程序(Handler)
- 通过add_scopes_to_payload添加scope到jwt payload
# **把刷新令牌保存到redis中
# **第一个参数为user_id或者authenticate方法返回的user对象
# **第二个参数为刷新令牌
async def store_refresh_token(user_id, refresh_token, *args, **kwargs):
key = 'refresh_token_{user_id}'
await aredis.set(key, refresh_token)
# **从redis中检索刷新令牌
# **第一个参数为请求对象
# **第二个参数为user_id或者authenticate方法返回的user对象
async def retrieve_refresh_token(request, user_id, *args, **kwargs):
key = f'refresh_token_{user_id}'
return await aredis.get(key)
# **设置名称转换为大写,并添加SANIC_JWT_前缀
app = Sanic()
app.config.SANIC_JWT_ACCESS_TOKEN_NAME = 'jwt'
Initialize(app)
# **继承配置 class MyConfiguration(Configuration): # **重写类的属性覆盖原属性 access_token_name='jwt' # **使用方法set_<setting>覆盖原属性 def set_access_token_name(self): return 'jwt' # **set_<setting>不限于一个函数,这样也可以 set_access_token_name = 'jwt' # **get_< settings >()方法对每个请求求值 # **节约资源,每个请求只计算一次,在该请求的生命周期内缓存结果 def get_authorization_header(self, request): return request.headers.get(key) if key in request.headers else "authorization" # **注册 Initialize(app, configuration_class=MyConfiguration)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。