def current_user
@current_user ||= User.find_by_auth_token!(cookies[:auth_token]) if cookies[:auth_token]
end
我甚至试过这个:
begin
@current_user ||= User.find_by_auth_token!(cookies[:auth_token]) if cookies[:auth_token]
rescue ActiveRecord::RecordNotFound => e
@current_user ||= nil
end
但它只返回零值。 请帮忙。
控制器:
if params[:remember_me]
cookies.permanent[:auth_token] = user.auth_token
else
cookies[:auth_token] = user.auth_token
end
编辑: 型号:
before_create :generate_token(:auth_token)
def generate_token(column)
begin
self[column] = SecureRandom.urlsafe_base64
end while User.exists?(column => self[column])
end
我认为我遇到了before_create
的问题。它的写法是否正确?
答案 0 :(得分:1)
这对我来说很有用,因为浏览器的cookie和保存到用户模型的cookie不一致:
def current_user
@current_user ||= User.find_by_auth_token!(cookies[:auth_token]) if cookies[:auth_token]
rescue ActiveRecord::RecordNotFound => e
@current_user ||= session[:current_user_id] && User.find_by_id(session[:current_user_id]) # Use find_by_id to get nil instead of an error if user doesn't exist
end
helper_method :current_user
对我来说,删除当前登录的用户时会出现此问题。上述代码可以阻止任何错误。
答案 1 :(得分:0)
您似乎无法找到该实例,因为您的网络浏览器中不再存在cookie,存在冲突。因此,您应该清除浏览器的datacache,然后问题就会消失。