通过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/