我是flask新手,最近了解了flask_security/flask_login/flask_user。
我希望我能以某种方式将 flask_login 和 flask-JWT 一起用于 REST API。
基本上,我希望从 flask_login 中获得记住我、忘记密码等功能
。搜索后,我发现它无法在同一个烧瓶视图上完成。
有人可以指导我,怎么做?
谢谢。
我是flask新手,最近了解了flask_security/flask_login/flask_user。
我希望我能以某种方式将 flask_login 和 flask-JWT 一起用于 REST API。
基本上,我希望从 flask_login 中获得记住我、忘记密码等功能
。搜索后,我发现它无法在同一个烧瓶视图上完成。
有人可以指导我,怎么做?
谢谢。
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
否则,我按照本教程进行操作,因此令牌是这样创建的(在登录功能中):
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 似乎已停产。