我正在使用设计来进行基本身份验证。当我去localhost:3000/users/sign_in
时,我将能够登录,或者如果我在登录时去那里,我会收到相应的消息“你已经登录了。”
但是,即使成功登录
,user_signed_in?
总是评估为false
<div id="user_nav">
<% if user_signed_in? %>
Welcome <%= current_user.email %>!
<%= link_to "Sign out", destroy_user_session_path, :method => :delete %>
<% else %>
<%= link_to "Connect With Facebook", "/auth/facebook" %>
<%= link_to "Sign out", destroy_user_session_path, :method => :delete %>
<% end %>
</div>
<% flash.each do |name, msg| %>
<%= content_tag :div, msg, :id => "flash_#{name}" %>
<% end %>
</div>
以下是config/application.rb
class ApplicationController < ActionController::Base
protect_from_forgery with: :exception
before_filter :authenticate_user!
private
def current_user
@current_user ||= User.find(session[:user_id]) if session[:user_id]
end
helper_method :current_user
end
如何让user_signed_in?
成为真实?无论我是否成功登录
current_user
也仍然是假的
答案 0 :(得分:3)
这可能是因为您正在定义自己的current_user方法。然后,这将覆盖Devise提供的那个。
如果查看the source for the user_signed_in? method,您可以看到此方法使用当前用户(由Devise定义的用户)。 Devise可能不会将当前用户保存到会话[:user_id],这是您的方法正在检查的内容。因此,当Devise从user_signed_in?中调用您的方法时,它总是返回false。
尝试从ApplicationController中删除当前用户方法,看看是否能解决问题。