通过Michael Hartl的railstutorial.org,我处于第8章(特别是8.2.3)。当前的问题是实现 session 以使用户跨多个 View 登录,但是本节中实现的功能应该是关闭浏览器窗口时到期的临时 session (注销用户)。这是教科书上的声明,指出了这样的情况:



我已经在Google Chrome和Firefox上测试了此功能-我成功登录,导航到多个页面(以确保我的 session 在log_in重定向之后仍然存在),然后关闭浏览器-但是当我重新加载网络应用程序时,我仍在登录。我已经复制了所有代码,与文本中的代码完全一样,但无济于事。供引用,这是我的sessions_helper.rb文件:

module SessionsHelper

  # Logs in the given user.
  def log_in(user)
    session[:user_id] = user.id
  end

  # Returns the current logged-in user (if any).
  def current_user
    @current_user ||= User.find_by(id: session[:user_id])
  end

  # Returns true if the user is logged in, false otherwise.
  def logged_in?
    !current_user.nil?
  end

end

这是我的sessions_controller.rb文件(尚未实现destroy操作,因为在文本中尚未赋予“注销”按钮任何功能的要点):
class SessionsController < ApplicationController

  def new
  end

  def create
    user = User.find_by(email: params[:session][:email].downcase)
    if user && user.authenticate(params[:session][:password])
      # Log the user in and redirect to the user's show page.
      log_in user
      redirect_to user
    else
      flash.now[:danger] = 'Invalid email/password combination'
      render 'new'
    end
  end

  def destroy
  end

结尾

注意:在回答中,请不要建议添加替代代码或更改现有代码(除非您发现我发布的代码有误)。教科书假定这是有效的代码,不需要任何更改即可正常运行。

最佳答案

请检查您的config/initializers/session_store.rb文件。应该有类似的东西

Rails.application.config.session_store :cookie_store, key: '_app_session'

您必须将expire_after值和nil值添加到选项中:
Rails.application.config.session_store :cookie_store, key: '_app_session', expire_after: nil

应用此更改后, session 将在用户关闭浏览器时到期。您可以阅读有关Cookie过期的更多信息here

关于ruby-on-rails - 关闭浏览器时 session 未销毁-RailsTutorial.org,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32621473/

10-11 08:15