首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在REST API中同时使用flask_login和flask-JWT

在REST API中同时使用flask_login和flask-JWT
EN

Stack Overflow用户
提问于 2018-06-14 19:04:47
回答 1查看 4.3K关注 0票数 5

我是第一次接触flask,最近了解了flask_security/flask_login/flask_user。

我希望我能以某种方式将flask_login与flask-JWT一起用于REST API。

基本上,我想有像记住我,忘记密码等功能,从flask_login

经过搜索,我发现它不能在同一个flask view.上完成

有没有人能指导我,怎么做?

谢谢。

EN

回答 1

Stack Overflow用户

发布于 2019-01-03 18:19:34

flask-login正是为此目的提供了request_loader回调,用于以一种自定义的方式验证请求。

在我的例子中,我将以下代码添加到我的create_app函数:

代码语言:javascript
复制
@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教程,所以令牌是这样创建的(在登录函数中):

代码语言:javascript
复制
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似乎已经停用了。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50856038

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档