0

我正在阅读 Railstutorial.org 上的教程,并通过测试完成了第 8 章。我的问题是,如果我完全按照指南的代码进行操作,我可以登录,但无法注销

如果我单击“注销”,我将被重定向到 root_path,但仍然是登录的成员。

我想我将这种行为追溯到我的会话助手。具体如下几行:

  def current_user
    @current_user ||= User.find_by_remember_token(cookies[:remember_token])
  end

通过 rails 控制台和 pry,我能够确定 cookies[:remember_token] 为 nil,但由于我的用户的 remember_token 也是 nil,所以 find_by_remember_token 说:“嘿 nil == nil!太好了!我们找到了我们的用户!” 除了这显然不是理想的行为。

我通过将 current_user 方法更改为以下内容来修复它:

  def current_user
   @current_user ||= cookies[:remember_token] && User.find_by_remember_token(cookies[:remember_token])
  end

我完全接受并理解这可能是我的代码中的错误。我从项目中的这一点找到了 Michael Hartl 的提交,并比较了我们的文件,找不到差异。关于这里可能发生的事情的任何想法?

感谢您的时间。

4

1 回答 1

-1

把这个放在你的...

控制器:

def logout
   reset_session
   redirect_to :controller => 'classified', :action => 'list'
end

在您看来:您需要添加一个注销链接。

<% else %>
    <p><%= "Welcome #{session[:user].login}!" -%></p>
    <p><%= link_to 'Logout', :controller => 'user',:action => 'logout' -%></p>
<% end %>
于 2012-12-18T07:31:10.903 回答