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.