2013-07-17 6 views
0

Je migre une application Rails 2 vers Rails 3 et j'ai dû utiliser une nouvelle solution d'authentification puisque restful_authentication n'est plus supporté. J'essaie Devise et j'ai des problèmes avec ça. J'ai une page de connexion, qui vous dirige ensuite vers l'application. Vous pouvez également utiliser l'application sans vous connecter, mais certaines options ne sont pas disponibles jusqu'à ce que vous vous connectiez.concevoir dans rails 3: 'user_signed_in?' false 'signed_in?' true 'current_user' néant

Une fois que l'exploitation forestière en dit que je Devise ai connecté via un message flash, mais toute current_user évaluerai à nil, current_user.blank? est évaluée à true et tout user_signed_in? évaluera à false. Bizarrement signed_in? évalue à true. La vérification des données de ma session montre que warden.user.user.id contient l'ID utilisateur correct et qu'un jeton csrf existe. Ceci est vrai à la fois dans la vue et dans le contrôleur.

est ici routes.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 

User.rb

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 

J'ai vu beaucoup de questions similaires sur le SO, mais aucune des réponses semblent correspondre à mon scénario. Toute aide serait grandement appréciée, merci!

EDIT:warden.authenticate(:scope => :user) renvoie ce que j'attendrais current_user pour retourner.

Répondre

0

Je crois que j'ai résolu ce problème, le plugin restful_authentication a ajouté un fichier UsersHelper qui, selon moi, interférait d'une manière ou d'une autre avec la façon dont Devise gérait la classe User.

Questions connexes