2016-07-23 5 views
0

Ich folgte einem Tutorial auf Rails Formen (Login, Logout). Alles ging gut, außer für dieses Bit: Sobald ein Benutzer sich angemeldet hat, sollte der untere Teil der Seite sagen "Sie sind eingeloggt als" gefolgt von einer E-Mail-Adresse, so wird zum Beispiel sagen: "Sie sind als Jane eingeloggt @ aol.com ". Die Codezeile responsbile dafür:Wie kann "current_user" (codiert als `session [: user_id]`) Benutzer-E-Mail anstelle von irgendeinem seltsamen Code anzeigen?

<p>You are logged in as: <%= @current_user %></p>

Doch was ich stattdessen bekommen ist You are logged in as: #<User:000s500r00k000h0> (keine exakte Kopie)

Für das Leben von mir, ich kann nicht herausfinden, was diese Zahl ist und warum der E-Mail des Benutzers nicht angezeigt-nor, wo die Fehlersuche beginnen:

current_user definiert in Application:

class ApplicationController < ActionController::Base protect_from_forgery with: :exception

def authentication_required if !logged_in? redirect_to login_path end end

def logged_in? !!current_user end

def current_user @current_user ||= begin User.find(session[:user_id]) if session[:user_id] end end helper_method :current_user end

Die user_id sollte die E-Mail des Benutzers sein. Was habe ich verpasst?

Antwort

1

scheint zunächst falsch einige Ihrer Code

class ApplicationController < ActionController::Base 
    protect_from_forgery with: :exception 
    before_action :authentication_required 

    def authentication_required 
    redirect_to login_path if !logged_in? 
    end 

    def logged_in? 
    current_user.present? 
    end 

    def current_user 
    @current_user ||= User.find(session[:user_id]) if session[:user_id] 
    end 
    helper_method :current_user 
end 

Sie sind eine Hilfsmethode zu schaffen, damit Sie nicht @current_user aufrufen müssen, rufen Sie einfach current_user

Auch session[:user_id] ist nicht die email. Es ist die ID. Sie verwenden es, um den Benutzer mit User.find(session[:user_id]) zu finden. Dies ist das gleiche wie .

#<User:000s500r00k000h0> ist eine Referenz auf das Benutzerobjekt, das Sie @current_user zugewiesen haben, die Zahlen sind der Speicherplatz im Speicher, wo es gespeichert ist.

Sie müssen lediglich die Methode aufrufen, die Sie für den angemeldeten Benutzer anzeigen möchten. Wenn email dann email und wenn username dann username usw.

+0

Vielen Dank! Der Grund, warum ich dieses 'current_user'-Problem herausfinden möchte, ist: Das Tutorial demonstrierte sicheres Anmelden/Abmelden und wie man bestimmte Informationen privat hält (oder vor Hacking schützt) - also' current_user' anstelle von 'user.email' (obwohl ehrlich gesagt habe ich nicht genug gelernt, um alles zu verstehen). Und das Tutorial zeigt die E-Mails des eingeloggten Benutzers. – YCode

+0

Die E-Mail wird immer nur für einen angemeldeten Benutzer angezeigt, wie die before_action: authentication_required leitet alle Personen um, die nicht eingeloggt sind. –

1

Ändern Sie einfach <p>You are logged in as: <%= @current_user %></p> zu <p>You are logged in as: <%= @current_user.user_id %></p>. Was Sie derzeit als #<User:000s500r00k000h0> sehen, ist nur eine Darstellung eines Benutzerobjekts selbst.

1

Sie sollten angeben, was Sie von der @current_user als solche wollen:

<p>You are logged in as: <%= @current_user.email %></p> 

Wenn Sie nicht angeben, wird Rails nur werfen, was die @current_user ist.

Verwandte Themen