当前,<% if signed_in?%>存在问题。
当用户登录时,令牌将被创建为,但在以下情况下,没有一个更改:
<% if signed_in? %>
<li><%= link_to "Post", "signup", :class=> "post main-button-color" %></li>
<li><%= link_to "Settings", "signup", :class=> "settings main-button" %></li>
<li><%= link_to "Sign Out", "signout", :class=> "signout main-button" %></li>
<% else %>
<li><%= link_to "Sign Up", "signup", :class=> "signup main-button" %></li>
<li><%= link_to "Sign In", "signin", :class=> "signin main-button" %></li>
<% end %>编辑
SessionsHelper
def sign_in(user)
remember_token = User.new_remember_token
cookies[:remember_token] = {:value => remember_token, :expires => 8.hours.from_now} #or whenever
user.update_attribute(:remember_token, User.hash(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.hash(cookies[:remember_token])
@current_user ||= User.find_by_remember_token(cookies[:remember_token])
end
def sign_out
self.current_user = nil
cookies[:remember_token] = nil
endApplicationController
protect_from_forgery with: :exception
include SessionsHelper用户模型
before_save :create_remember_token
def User.new_remember_token
SecureRandom.urlsafe_base64
end
def User.hash(token)
Digest::SHA1.hexdigest(token.to_s)
end
private
def create_remember_token
self.remember_token = SecureRandom.urlsafe_base64
end在登录时,所有内容都仍然有效,记住令牌保存在浏览器cookie中,但是HTML仍然不能工作。任何帮助都将不胜感激。谢谢。
发布于 2014-04-10 19:34:48
您所做的事情看起来类似于这,试着四处寻找一个深入的解释。
看起来您的signed_in?方法是正确的。不过,在您的sign_in(user)方法中,您并没有对cookie或令牌做任何事情。
正如链接中所解释的,当用户登录时,您需要:
current_user方法检查是否存在与会话关联的活动用户。如果有,它会被退回。如果没有,则获取浏览器的会话令牌,对其进行加密,并检查数据库中是否有任何用户拥有当前会话令牌。如果是,则返回该用户。如果不是的话,没有。这个值是由signed_in?检查的。由于没有正确设置它们,current_user返回零,并且页面的行为就像用户没有被登录一样。
def sign_in(user)
# Create a token
auth_token = SecureRandom.urlsafe_base64
# Store the token in the browser
cookies.permanent[:auth_token] = auth_token
# Encrypt the token, store in database
user.update_attribute(:auth_token, Digest::SHA1.hexdigest(auth_token))
# Set current session's user
self.current_user = user
end发布于 2014-04-10 19:32:57
我想你已经遵守了rails教程..。因此,当您在用户中签名时,您应该分配一个cookie值,以便根据该cookie获取并检查是否有用户。
在这种情况下,您应该更改您的sign_in方法如下:
def sign_in(user)
remember_token = User.new_remember_token
cookies[:remember_token] = {:value => remember_token, :expires => 8.hours.from_now} #or whenever
user.update_attribute(:remember_token, User.encrypt(remember_token))
self.current_user = user
end您在current_user方法中请求cookie,并根据db检查它,但是您没有任何分配给它的.
https://stackoverflow.com/questions/22996914
复制相似问题