Je suis en train de créer une application avec deux modèles assez distincts, utilisant à la fois le principe d'authentification. Une fois que vous vous connectez en tant que maison, chaque individu de la maison peut se connecter en tant que résident de cette maison. Tout fonctionne bien, sauf que lorsque je quitte une session de résident en utilisantCréer des sessions pour plusieurs utilisateurs
destroy_resident_session
le seul problème est qu'il tue aussi la session de la maison car il appelle
Devise::SessionsController#destroy
J'ai essayé de créer une session personnalisée pour les résidents, voici mon code ci-dessous:
class SessionsController < Devise::SessionsController
# DELETE /resource/sign_out
def destroy
redirect_path = after_sign_out_path_for(resource_name)
signed_out = sign_out(resident)
set_flash_message :notice, :signed_out if signed_out && is_navigational_format?
# We actually need to hardcode this as Rails default responder doesn't
# support returning empty response on GET request
respond_to do |format|
format.all { head :no_content }
format.any(*navigational_formats) { redirect_to redirect_path }
end
end
end
Cela donne une erreur:
undefined local variable or method `resident'
je être mal compris la logique de la méthode, mais il semble que je veux changer la ligne suivante dans le legs contrôleur de sessions:
signed_out = (Devise.sign_out_all_scopes ? sign_out : sign_out(resource_name))
Depuis que je ne veux pas vous déconnecter de tous les champs d'application, seule la portée du résident.
Résolu
Tout ce que je devais faire a été mis
config.sign_out_all_scopes = false
dans
config/devise.rb
Et aussi, devait se rappeler redémarrer mon serveur :)
You rock! Était aux prises avec le même problème. Cette option devrait vraiment être mentionnée dans la section "Configuration de plusieurs modèles" du fichier README. :) BTW-Vous devez formellement répondre à cette question, puis acceptez votre propre réponse. – odigity
Je le seconde: vous devez ajouter votre solution comme réponse à cette question, puis accepter cette réponse comme la bonne. – Ernesto