设计 - 无法在rails视图中显示登录或注销

时间:2013-11-18 09:20:23

标签: ruby-on-rails facebook devise ruby-on-rails-4 omniauth

我正在使用设计来进行基本身份验证。当我去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也仍然是假的

1 个答案:

答案 0 :(得分:3)

这可能是因为您正在定义自己的current_user方法。然后,这将覆盖Devise提供的那个。

如果查看the source for the user_signed_in? method,您可以看到此方法使用当前用户(由Devise定义的用户)。 Devise可能不会将当前用户保存到会话[:user_id],这是您的方法正在检查的内容。因此,当Devise从user_signed_in?中调用您的方法时,它总是返回false。

尝试从ApplicationController中删除当前用户方法,看看是否能解决问题。