J'utilise authlogic pour authentifier les utilisateurs. Dans mes contrôleurs j'utilise current_user, défini (comme indiqué) comme suit:Détermination de current_user avec declarative_authorization et authlogic
def current_user_session
return @current_user_session if defined?(@current_user_session)
@current_user_session = UserSession.find
end
def current_user
return @current_user if defined?(@current_user)
@current_user = current_user_session && current_user_session.record
end
J'utilise aussi declarative_authorization pour gérer les autorisations de l'utilisateur actuel. Tout fonctionne correctement dans le scénario d'exécution normal, mais lorsque je crée des tests fonctionnels qui utilisent des instructions de requête telles que "get_with", current_user dans le contrôleur est nul. J'ai regardé le code auxiliaire de test declareative_authorization et j'ai trouvé que dans ce scénario, la gemme declarative_authorization stocke réellement l'utilisateur actuel dans Authorization.current_user (qui vient à son tour de Thread.current ["current_user"]). Donc, il semble y avoir une confusion de la façon dont un utilisateur actuel est géré dans différents scénarios.
Ma question: quelle est la manière appropriée de trouver current_user dans le runtime normal et le scénario de test?
Oui, j'ai essayé. Mais c'est l'inverse: dans le test fonctionnel, Authorization.current_user contient l'utilisateur correct, mais c.current_user == nil. Donc, cette déclaration ne fonctionnera pas ... –
Une question comment maintenez-vous votre session d'utilisateur dans les tests? Essayez de déboguer la session peut-être qu'il persiste maintenant pour une raison quelconque. –
En ce qui me concerne, pour se connecter à un utilisateur avec authlogic, vous devez créer sa session via UserSession.create (utilisateur (: admin)), puis l'utilisateur actuel d'authlogic fonctionne. – Draiken