2011-01-21 1 views
0

J'ai implémenté l'application Authlogic dans mes rails qui fonctionne et qui fonctionne très bien. Les utilisateurs peuvent se connecter, déconnecter, etc.Rails + problème Authlogic @current_user - La méthode "Show" ne fonctionne plus

Cependant, comme je l'ai changé mes méthodes dans le users_controller utiliser la variables @current_user, aucun de mes méthodes utilisateur ou formes (autres que « index » étrangement ...) travail!

Par exemple, ces méthodes « Afficher » fonctionne et montre le profil de l'utilisateur pour tous les utilisateurs (Note: Je veux limiter finalement cela au utilisateur actuellement connecté en quelque sorte):

def show 
    @user = User.find(params[:id]) 
end 

Si je suis le méthode show comme indiqué dans le Authlogic rails acteurs et l'exemple officiel:

def show 
    @user = @current_user 
end 

Je reçois toutes sortes de undefined method METHOD for nil:NilClass erreurs. Il semble que la variable @current_user ne contienne aucune information de l'utilisateur.

Je suppose que le @current_user tire information de la méthode current_user tel que défini dans le contrôleur d'application ci-dessous:

Qu'est-ce que je manque? Mon intuition est qu'il n'y a pas de correspondance entre l'objet Utilisateur du modèle utilisateur et la méthode current_user. Toute aide serait grandement appréciée!

Merci d'avance!

~ Dan

Répondre

5

ne devrait-il être juste

def show 
    @user = current_user 
end 

sans @?

+0

Corriger, fournit la 'Devise current_user' méthode pour vous. –

+0

Il est logique pour moi de savoir que j'appelle une méthode plutôt qu'une variable prédéfinie. C'était un peu déroutant car une grande partie de l'exemple de code en ligne l'a mis à @user = @current_user. Merci encore pour votre aide! C'est pourquoi j'aime StackOverflow – thoughtpunch

1
def 
if @current_user 
@user = @current_user 
else 
@user = User.find(params[:id]) 
end 
end 

Juste une supposition, essayez-le.

+0

Ce n'était pas la réponse complète, mais j'ai fini par utiliser cette idée pour laisser les utilisateurs non connectés voir les profils. Merci! – thoughtpunch

2

current_user est une aide fournie avec authlogic, vous devez donc l'utiliser sans '@'. Habituellement, vous créez @sothing pour le passer du contrôleur à la vue, de sorte que vous allez accéder à quelque chose que vous avez préparé dans la méthode d'action.

+0

Cela a du sens ...Je me demande pourquoi ils l'ont mis de cette façon dans le code d'exemple sur Github? – thoughtpunch

2

J'ai eu un problème similaire avec authlogic et rails 3, c'était à cause de l'authentification http apache que j'avais sur mon serveur de production. Et je suis arrivé que fixé en ajoutant la ligne ci-dessous à mon user_session.rb (modèle)

allow_http_basic_auth false 

c'est le lien de blog qui m'a sauvé la vie oufhttp://www.christopherirish.com/2011/08/12/rails-3-authlogic-sessions-not-persisting-in-production/comment-page-1/#comment-181

+0

quel est le problème actullay? Pouvez-vous clarifier ? qu'est-ce que 'allow_http_basic_auth false 'fait? – Sazzad

Questions connexes