在REST API中一起使用flask_login和flask-JWT

时间:2018-06-14 11:04:47

标签: flask-restful flask-login flask-jwt

我是新手,最近了解了flask_security / flask_login / flask_user。

我希望以某种方式我可以将flask_login与flask-JWT一起用于REST API 基本上,我想从flask_login中获得诸如记住我,忘记密码等功能 在搜索时,我发现它无法在同一flask view.

上完成

有人可以指导我,怎么做? 感谢。

1 个答案:

答案 0 :(得分:0)

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已经停产了。