2012-02-15 57 views
5

我希望你能帮助,一直在努力与此一段时间: 即时通讯使用设计和Rails 3Rails 3设计会话有价值,但如果user_signed_in <<%? %>是虚假的

当我点击登录,我得到设计登录页面,我冲入用户名和密码,然后单击登录。

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


之前,我登录时所用色器件我登录与色器件

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

<% if user_signed_in? %> 
**is false** 

编辑

<%= session %> 
no value 

<% if user_signed_in? %> 
**is false** 

后:

我的routes.rb文件

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

    get "home/index" 


<% if signed_in? %> 
**is still false** 

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 

我想我找到了我的问题,我的控制器之一

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 

之后我删除该块它似乎很好地工作:)

+2

我总是用'if current_user' :) – 2012-02-15 08:16:17

+0

和kishie一样。我也总是最终检查current_user。这可用吗? – zsquare 2012-02-15 14:11:56

+1

非常感谢!你结束了我的挫败感。 – Brett 2012-05-06 02:08:38

回答

3

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

+0

signed_in?也不起作用,相同的结果 – Francois 2012-02-15 09:40:19

+0

你也可以发布你的user.rb文件吗? – 2012-02-15 17:00:38

0

我也一直有这个问题。这很有趣,因为user_signed_in?应该比current_user更可靠,但这似乎表明我怀疑 - 它实际上不太可靠。

让我们知道是否有人发现不同的东西。

0

人们,我一直在努力解决同样的问题,并最终找到了解决方案!这可能不是你的情况,但仍然如此。

我从简单的手写身份验证过程切换到Devise时发生了问题。而current_user或user_signed_in的原因是什么?在登录时都是空白和虚假的,我在我的sessions_helper.rb文件中保留了旧系统的类似方法(sign_in,current_user等),而这些(旧)方法是从一个全新的Devise控制器调用的来自Devise lib的正确版本。

所以我刚刚注释掉了我的旧会话助手中的所有服务验证过程的方法。然后它工作!

0

正如@Irina Nazarova所说。检查以确保您没有任何方法与我自己写的包含在您项目中的同名同名。似乎Devise首先使用它。这是导致我的问题。

相关问题