python - Flask-Login 在使用 remember_me 时使用注销后仍然登录

标签 python session flask flask-login

要使用 Flask-login 注销 Flask 中的用户,我只需调用 logout_user(),但在添加一些额外的 session 检查后,在我单击注销并再次单击返回“登录页面”后,我仍然登录. 只有当我选择“记住我”时才会发生

我想我在这里误解了 session 和 logout_user() 的概念,任何人都可以澄清和帮助吗?

在我看来,我认为当我清除 session 时,其中的所有内容包括“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 名称作为 remember-me cookie (remember_token) 时,这是适用的。如果您自定义了 REMEMBER_COOKIE_NAME,请使用您自己的值调整代码。设置。

不过,我的友好建议是完全避免使用 Flask。

关于python - Flask-Login 在使用 remember_me 时使用注销后仍然登录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25144092/

相关文章:

PHP session 副作用警告 - 如何解决?

PHP session_start 错误(找不到这样的文件或目录)

python - 为什么设置 remember=False 仍然让我保持登录状态?

python - 将 Flask 表单值转换为 int

python - 为什么当我设置 pos=[50,0] 时 psychopy.visual.TextStim 不渲染文本?

python - 比较两个日期列并验证日期是否早于日期

python - 在 warpAffine 变换后,如何将点重新映射或恢复到其以前的坐标系?

python - 索引错误 : boolean index did not match indexed array along dimension 0

php - 现在还使用 PHP session 吗?

python - 导入错误 : No module named Coreapp (Flask and Google App Engine)