要使用 Flask-login 在 Flask 中注销用户,我只需调用 logout_user(),但是在添加一些额外的会话检查后,在我单击注销并再次单击返回“登录页面”后,我仍然登录。它发生了只有当我选择“记住我”时
我想我在这里误解了 session 和 logout_user() 的概念,有人可以澄清并提供帮助吗?
在我看来,我认为当我清除会话时,其中的所有内容(包括“user_id”、“用户名”等)也将被清除。但不知何故,“user_id”或“username”字段仍然存在。我认为这就是导致问题的原因。
我的代码如下:
注销部分:
@mod.route('/logout/')
@login_required
def logout():
logout_user()
session.clear()
return redirect(url_for('users.login'))
登录部分:
@mod.route('/login/', methods=['GET', 'POST'])
def login():
if g.user is not None and g.user.is_authenticated():
return redirect(url_for('users.home'))
form = LoginForm(request.form)
if form.validate_on_submit():
user = User.query.filter_by(email=form.email.data).first()
if user and check_password_hash(user.password, form.password.data):
session['user_id'] = user.id
session['username'] = user.nickname
session['remember_me'] = form.remember_me.data
remember_me = False
if 'remember_me' in session:
remember_me = session['remember_me']
session.pop('remember_me', None)
login_user(user, remember_me)
return redirect(url_for('users.home'))
return render_template("users/login.html", form=form)
对于仍然遇到这个问题的人...解决方案是清除“记住我”cookie。
这是一个例子:
@app.route('/logout', methods=['GET'])
def logout():
flask_login.logout_user()
session.clear()
if session.get('was_once_logged_in'):
del session['was_once_logged_in']
# Delete rememberme cookie because logout_user does not do it for you.
response = make_response(redirect(url_for('login')))
response.delete_cookie('remember_token')
return response
这适用于当您使用“记住我”cookie 的默认 cookie 名称时(remember_token
.) 如果您自定义了代码,请根据您自己的值调整代码REMEMBER_COOKIE_NAME https://flask-login.readthedocs.io/en/latest/#cookie-settings环境。
不过,我友好的建议是完全避免使用 Flask。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)