我正在使用 Flask-login 将会话管理集成到我的 Flask 应用程序中。但是如果我设置了“记住我”功能就不起作用会话保护 to strong,但是,如果设置为,它绝对可以正常工作basic.
用户加载器:
@login_manager.user_loader
def load_user(email):
user = get_user_with_email(email)
if user:
return User(user.id, user.email, user.role_id, user.createtime, user.updatetime)
从数据库中获取用户:
from psycopg2.extras import NamedTupleCursor
def get_user_with_email(email):
cursor = get_db().cursor(cursor_factory=NamedTupleCursor)
cursor.execute('SELECT * FROM users WHERE email = %s', (email,))
return cursor.fetchone()
和我的用户类别:
class User(UserMixin):
def __init__(self, username, email, role_id, createtime, updatetime):
self.username = username
self.email = email
self.role_id = role_id
self.createtime = createtime
self.updatetime = updatetime
@property
def password(self):
raise AttributeError('password is not a readable property')
@password.setter
def password(self, password):
self._password = generate_password_hash(password)
def verify_password(self, password):
return check_password_hash(self._password, password)
@property
def is_active(self):
"""All users are active"""
return True
@property
def is_anonymous(self):
"""Always return False, anonymous users aren't supported"""
return False
def get_id(self):
"""Return username for flask_login to use it as user id"""
return self.email
@property
def is_authenticated(self):
"""All users are authenticated"""
return True
def register(self, password):
self.password = password
# Todo: complete the registration logic
def __repr__(self):
return 'User(username={0}, email={1})'.format(self.username, self.email)
我正在按照文档中提到的方式进行操作,但是当浏览器关闭时用户仍然会注销,以防出现以下情况strong保护。我不确定出了什么问题。
我将不胜感激任何帮助,谢谢!