Rails 3设计会话有值但<%if user_signed_in?%>是假的

Fra*_*ois 5 ruby-on-rails ruby-on-rails-3

我希望你能帮忙,现在已经在这个问题上挣扎了一段时间:| 我正在使用设计和Rails 3

当我点击登录时,我得到设计登录页面,我打入用户名和pw并单击登录.

点击登录后,我被重定向到主页面,但现在我仍然看到登录链接,这意味着<%if user_signed_in?%>仍然是假的.但是我登录后似乎会话变量中有一些值,这里发生了什么?我一直在使用设计并且之前没有任何问题.谢谢你们!


在我用设计登录之前

<%= session %>
no value

<% if user_signed_in? %>
**is false**
Run Code Online (Sandbox Code Playgroud)

我用设计登录后

<%= session %>
_csrf_tokenAMUwVLu6G6rWfKICB43PYApFsYFRjVyJDSc2oU88uEk=warden.user.user.keyUser342$2a$10$.zslfggeUqvq.m/5LNSolOsession_id0db80c26bc36a4c1c74c223655dcb092

<% if user_signed_in? %>
**is false**
Run Code Online (Sandbox Code Playgroud)

编辑:

我的routes.rb文件

Cybercellar3::Application.routes.draw do
  devise_for :users

  get "home/index"
Run Code Online (Sandbox Code Playgroud)


<% if signed_in? %>
**is still false**
Run Code Online (Sandbox Code Playgroud)

EDIT2:

user.rb

class User < ActiveRecord::Base
      # Include default devise modules. Others available are:
      # :token_authenticatable, :encryptable, :confirmable, :lockable, :timeoutable and :omniauthable
      devise :database_authenticatable, :registerable,
             :recoverable, :rememberable, :trackable, :validatable

      # Setup accessible (or protected) attributes for your model
      attr_accessible :email, :password, :password_confirmation, :remember_me
    end
Run Code Online (Sandbox Code Playgroud)

我想我在我的一个控制器中发现了我的问题

application_controller.rb

    #facebook stuff
    def current_user
        @current_user ||= User.find_by_id(session[:user_id])
    end

    def signed_in?
        !!current_user
    end

    helper_method :current_user, :signed_in?

    def current_user=(user)
        @current_user = user
        session[:user_id] = user.id
    end
    #facebook stuff
Run Code Online (Sandbox Code Playgroud)

删除此块后,它似乎完美地工作:)

Wol*_*old 3

Devise 有一个“范围”的概念,以便您可以同时登录多种类型的用户,例如管理员用户和普通用户。要检查任何范围的用户是否已登录,请使用signed_in?。范围是通过模型类和routes.rb文件的命名来定义的。确保它们匹配。您可以同时发布两个吗?要对此进行测试,您还可以尝试集成测试。