在登录用户之前,您如何检查用户是否使用 flask-jwt-extended 登录



我正在使用flask-restful开发一个API。我想确保当用户登录时,除非他首先注销,否则他无法再次登录。我正在使用 flask-jwt-extended 并且想知道是否有办法在尝试登录之前检查用户已经登录的位置。

您可以尝试使用jwt_optional装饰器,但如果令牌过期或无效,它将引发错误:

@app.route('/hello')
@jwt_optional
def hello():
    user = get_gwt_identity()

或者只是检查令牌是否有效并返回用户。如果令牌无效,用户将无:

from flask_jwt_extended import get_jwt_identity, verify_jwt_in_request_optional
def get_identity_if_logedin():
    try:
        verify_jwt_in_request_optional()
        return get_jwt_identity()
    except Exception:
        pass
@app.route('/hello')
def hello():
    user = get_identity_if_logedin()
    # check if user is loged in
    if user:
        # user var here has jwt_identity

一种选择可能是在基本路由上使用jwt_optional装饰器,并在用户未登录时返回重定向到登录页面:http://flask-jwt-extended.readthedocs.io/en/latest/optional_endpoints.html

如果后端只是一个API,更好的选择可能是在前端(在本地存储或保存它的任何位置(中查找访问令牌,并放置是否应该显示登录页面的逻辑。

在受保护的终结点中,这将返回访问此终结点的 JWT 的标识。如果不存在 JWT,则返回None

请参阅 API 参考:

from flask_jwt_extended import jwt_required, jwt_optional, get_jwt_identity
if get_jwt_identity():
    pass
如果要

从flask_login复制"if current_user is auth",则可以创建自定义装饰器。

def jwt_login_required():
  def wrapper(fn):
    @wraps(fn)
    def decorator(*args, **kwargs):
        jwt = verify_jwt_in_request(optional=True)
        if(get_jwt_identity()):
            return current_app.ensure_sync(fn)(*args, **kwargs)
        else:         
            return redirect(url_for('login'))
    return decorator
return wrapper

然后你可以在你的应用程序中使用它

@app.route("/hello")
@jwt_login_required()
def hello():
 return render_template('/hello.html')

相关内容

  • 没有找到相关文章

最新更新