我正在将Rails 2应用程序迁移到Rails 3,并且不得不使用新的身份验证解决方案,因为不再支持restful_authentication。我正在尝试设计并且遇到问题。
我有一个登录页面,然后会将您引导至该应用程序。您也可以在不登录的情况下使用该应用程序,但在登录前无法使用某些选项。
登录Devise后说我已通过Flash消息登录,但任何current_user
评估为nil
,current_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)
返回的内容。
答案 0 :(得分:0)
我相信我已经解决了这个问题,restful_authentication插件添加了一个UsersHelper文件,我认为该文件在某种程度上干扰了Devise如何处理User类。