我正在做Michael Hartl的Rails教程第8章。當我嘗試通過存儲在瀏覽器cookie中的remember_token找到用戶時,它不起作用。 find_by方法返回NIL。我一直試圖通過查看存儲在瀏覽器中的記憶標記cookie並將其與存儲在用戶數據庫中的記憶標記進行比較來進行調試。他們不匹配,我不知道爲什麼。這是Session Helper的代碼。rails教程:cookie不匹配記憶標記
module SessionsHelper
def sign_in(user)
remember_token = User.new_remember_token
cookies.permanent[:remember_token] = remember_token
user.update_attribute(:remember_token, User.encrypt(remember_token))
self.current_user = user
end
def signed_in?
!current_user.nil?
end
def current_user=(user)
@current_user = user
end
def current_user
#remember_token = User.encrypt(cookies[:remember_token])
remember_token = "71e45660fbaa69bad9fb55b912f80122a584f6af"
#@current_user ||= User.find_by(remember_token: remember_token)
@current_user ||= User.find_by_remember_token(remember_token)
end
end
我一直在調整它,試圖弄清楚是怎麼回事。要調試我註釋掉了正常的線條,並且使用我在數據庫中看到的值顯式設置記憶標記 - 那麼應用程序就可以工作。當我將瀏覽器中存儲的cookie的值與存儲在數據庫中的記憶令牌的值進行比較時,它們不匹配。
我注意到的另一件事是我無法打電話給User_find_by。我收到一個錯誤,說它不能識別這個方法,所以我評論了它。然而,我可以調用User.find_by_remember_token。我可能安裝了某些錯誤的版本?
我已經嘗試重置數據庫 - 但我可以看到它,它看起來像它有所有正確的列。
這裏是_header.html.erb代碼:
<header class="navbar navbar-fixed-top navbar-inverse">
<div class="navbar-inner">
<div class="container">
<%= link_to "sample app", root_path, id: "logo" %>
<nav>
<ul class="nav pull-right">
<li><%= link_to "Home", root_path %></li>
<li><%= link_to "Help", help_path %></li>
<% if signed_in? %>
<li><%= link_to "Users", '#' %></li>
<li id="fat-menu" class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown">
Account <b class="caret"></b>
</a>
<ul class="dropdown-menu">
<li><%= link_to "Profile", current_user %></li>
<li><%= link_to "Settings", '#' %></li>
<li class="divider"></li>
<li>
<%= link_to "Sign out", signout_path, method: "delete" %>
</li>
</ul>
</li>
<% else %>
<li><%= link_to "Sign in", signin_path %></li>
<% end %>
</ul>
</nav>
</div>
</div>
</header>
你可以發佈你的'用戶'模型嗎? – vee
我秒。 '用戶'模型將幫助很多 – sambaek