我是第一次接触flask,最近了解了flask_security/flask_login/flask_user。
我希望我能以某种方式将flask_login与flask-JWT一起用于REST API。
基本上,我想有像记住我,忘记密码等功能,从flask_login
经过搜索,我发现它不能在同一个flask view.上完成
有没有人能指导我,怎么做?
谢谢。
发布于 2019-01-03 18:19:34
flask-login正是为此目的提供了request_loader回调,用于以一种自定义的方式验证请求。
在我的例子中,我将以下代码添加到我的create_app函数:
@login_manager.request_loader
def load_user_from_request(request):
auth_headers = request.headers.get('Authorization', '').split()
if len(auth_headers) != 2:
return None
try:
token = auth_headers[1]
data = jwt.decode(token, current_app.config['SECRET_KEY'])
user = User.by_email(data['sub'])
if user:
return user
except jwt.ExpiredSignatureError:
return None
except (jwt.InvalidTokenError, Exception) as e:
return None
return None否则,我遵循了this教程,所以令牌是这样创建的(在登录函数中):
token = jwt.encode({
'sub': user.email,
'iat':datetime.utcnow(),
'exp': datetime.utcnow() + timedelta(minutes=30)},
current_app.config['SECRET_KEY'])这样,您就可以在flask-login中使用@login_required,而不是定义自定义装饰器来保护视图。
我使用的是PyJWT而不是Flask-JWT,因为Flask-JWT似乎已经停用了。
https://stackoverflow.com/questions/50856038
复制相似问题