在rails 3中设计:'user_signed_in?'假'signed_in?' true'current_user'nil

时间:2013-07-17 16:43:24

标签: ruby-on-rails-3 devise

我正在将Rails 2应用程序迁移到Rails 3,并且不得不使用新的身份验证解决方案,因为不再支持restful_authentication。我正在尝试设计并且遇到问题。

我有一个登录页面,然后会将您引导至该应用程序。您也可以在不登录的情况下使用该应用程序,但在登录前无法使用某些选项。

登录Devise后说我已通过Flash消息登录,但任何current_user评估为nilcurrent_user.blank?评估为true和任何{{ 1}}将评估为user_signed_in?。奇怪false评估为signed_in?。检查我的会话数据表明true包含正确的用户ID,并且存在csrf令牌。在视图和控制器中都是如此。

这是routes.rb

warden.user.user.id

User.rb

MyApp::Application.routes.draw do

  devise_for :users

  match "/:controller(/:action(/:id))"  
  match "/:controller(/:action(/:id))(.:format)"
  match "/:controller(/:action(.:format))"

devise_scope :user do
 get 'signup', :to => 'devise/registrations#new'
 get 'login', :to => 'devise/sessions#new'
 get 'signout', :to => 'devise/sessions#destroy'
end 
   root :to => 'main#design'

end

我在SO上看过很多类似的问题,但没有一个答案似乎适合我的情景。非常感谢任何帮助,谢谢!

编辑: require 'digest/sha1' class User < ActiveRecord::Base devise :database_authenticatable, :registerable, :recoverable, :rememberable, :trackable, :confirmable, :validatable, :encryptable, :encryptor => :restful_authentication_sha1 attr_accessible :email, :password, :password_confirmation, :remember_me, :profile_company, :profile_state, :profile_city, :profile_postcode, :profile_country, :profile_phone, :profile_address validates_length_of :name, :maximum => 100 validates_presence_of :email validates_length_of :email, :within => 6..100 validates_uniqueness_of :email def profile_complete? if !(self.profile_address.blank? || self.profile_city.blank? || self.profile_state.blank? || self.profile_phone.blank? || self.name.blank? || self.state != 'active') true else false end end end 返回我期望warden.authenticate(:scope => :user)返回的内容。

1 个答案:

答案 0 :(得分:0)

我相信我已经解决了这个问题,restful_authentication插件添加了一个UsersHelper文件,我认为该文件在某种程度上干扰了Devise如何处理User类。