【发布时间】:2015-12-13 19:12:00
【问题描述】:
在阅读 Michael Hartl 的 railstutorial.org 时,我已进入第 8 章(特别是 8.2.3)。当前的问题是实现一个会话以使用户在多个视图中保持登录状态,但本节中实现的功能应该是一个 临时 会话,当浏览器窗口到期时(将用户注销)已经关闭。这是教科书上的声明:
如果您完全退出浏览器,您还应该能够验证应用程序是否忘记了您的登录状态,需要您重新登录才能看到上述更改。
我已经在 Google Chrome 和 Firefox 上测试了这个功能——我成功登录,导航到多个页面(以确保我的会话在 log_in 重定向之后仍然存在),然后关闭浏览器——但是当我重新加载web 应用程序,我仍然登录。我已将所有代码完全复制到文本中,但无济于事。作为参考,这是我的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
结束
注意:在您的回答中,请不要建议添加替代代码或更改现有代码(除非您发现我发布的代码有错误)。教科书假定这是工作代码,不需要任何更改即可正常运行。
【问题讨论】:
标签: ruby-on-rails ruby session login railstutorial.org