所以我正在使用rails和我的Signed_in?方法不起作用
<。>在.html.erb 中<% if signed_in? %>
这是我的会话控制器
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?
p "TRYING TO SIGN IN"
p !current_user.nil?
p current_user
p self.current_user
p @current_user
p self.current_user
!current_user.nil?
end
def current_user=(user)
@current_user = user
end
def current_user?(user)
user == current_user
end
def current_user
@current_user ||= User.find_by_remember_token(cookies[:remember_token])
end
end
我添加了一份印刷声明。
目前他们正在日志中返回
"TRYING TO SIGN IN"
false
nil
nil
nil
nil
知道为什么会这样,以及如何解决它?
感谢
答案 0 :(得分:0)
存储在数据库中的remember_token已加密
user.update_attribute(:remember_token, User.encrypt(remember_token))
您正在尝试查找具有明文版本的用户,这就像尝试将“token_1”与“laskj5dflkasjdflkas4djf1la134232sdk2jf”进行比较
使用
@current_user ||= User.find_by_remember_token(User.encrypt(cookies[:remember_token]))
编辑:你有没有理由使用cookie而不是会话存储?