flask-login 无限重定向问题解决方案

flask-login有时候会莫名地出现无限重定向问题。

  • 确认 user_load 回调函数一定要正确
  • 如果都感觉没什么问题,那么问题有可能出现在login_user()函数上面。

postman调试可以正常返回结果,但是浏览器不行。

那么有可能是刚刚login就马上过期了,令remember为True就行了。但是这里在本质上是让浏览器保存了长时间保持cookie,相当于关闭了浏览器之后依然可以登录。

login_user(user, remember=True)

还有一个就是初始化顺序问题。
正确的初始化顺序:

login_manager.init_app(app)
db.init_app(app) # db is SQLAlchemy()

2022.9.19更新

确认了,这就是一个flask-login的bug,尤其是在使用next参数的时候会莫名出现问题。建议使用flask原生的session来进行登录状态,可以自定义很多字段,session其实就是一个存储会话数据的字典,用来进行一系列操作完全没有问题,原生的flask确实好用。

再次吐槽!!不要使用flask-login!!!真的没有必要!原生的session想要啥就有啥,不必担心库出错。在这里我提供下面的两个我自己项目里面写的装饰器。

# 登录装饰器
def login_required(func):
    @wraps(func)
    def wrapper(*args, **kwargs):
        if session.get('user_id'):
            return func(*args, **kwargs)
        else:
            raise Unauthorized(description='没有权限访问')
    return wrapper
# 实名认证装饰器
def verify_required(func):
    @wraps(func)
    def wrapper(*args, **kwargs):
        if session.get('is_verified'):
            return func(*args, **kwargs)
        else:
            raise Unauthorized(description='没有权限访问')
    return wrapper

基于python的装饰器,那么就可以根据session字段进行相对应的操作,非常的灵活。并且可以在视图函数里面直接调用session,就像一个字典一样。

猜你喜欢

转载自blog.csdn.net/m0_51156601/article/details/126447047
今日推荐