flask-login维护登录问题

flask-login尝试登陆前的登录状态是False,
登录后输出登录状态是True,
但是接下来转跳网页时状态就自动变成了False?
试了很多次, 都是这个问题, 网上貌似没有其他人遇到.
可查看console的状态输出.
ps:

if not user.verify_password(password)

这句话的原因是我还没把账户密码放进去, 所以现在测试只要能提交表单就能登录.
所以可以看到图中登录成功后输出的登录状态变化,
但是不知为何, 接下来redirect(next_page or url_for('index'))又显示没登录.

百思不得其解, 急问.

这是models部分的代码, 因为还没有连接到数据库, 所以这部分代码还不算完整.
图片描述
图片描述

阅读 3.2k
1 个回答

我觉得楼主的问题可能处在user model的 get_id 方法上

# 下面是get_id 的官方说明
# get_id()
# 返回一个能唯一识别用户的,并能用于从 user_loader 回调中 加载用户的 unicode 。
# 注意着 必须 是一个 unicode ——如果 ID 原本是 一个 int 或其它类型,
# 你需要把它转换为 unicode 。
# 其作用应该是:能用于从user_loader回调中加载用户
# 所以说这个get_id对每个user而言返回的应该是唯一的
# 而楼主的代码中,这个方法的返回值如下
# 这就会导致没办法从回调中获取用户的实例
return uuid.uuid4()

# 修改方式:
# 1. 简单粗暴测试方法,如果有效的话再根据情况优化。
return '1'
# 2. 后续改进方法(随便写的一个,楼主请根据实际优化)
return str(self.id)

补充(因为没用过这插件,所以如果说错的话请忽略。):

# 刚又看了下官方文档和源码
# 装饰器 login_require 执行成功,需要获取到当前用户
# 而获取当前用户,用户需要自定义如下几个方法
# 因为有个没在楼主的代码中看见,就在下面写下了

# 1. 供flask-login获取当前用户
@login_manager.user_loader
def load_user(user_id):
    return User.get(user_id)

# 2. 为load_user方法提供user_id
def get_id(self):
    # 这里的返回值不能是动态的
    # 而是针对每个user实例,无论在什么情况下都是唯一的
    return str(self.id)
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题