2012-03-29 6 views
0

Ich folgte Ryan Bates '/ RailsCasts Tutorial für Cookies Login und erinnere mich an Funktionalität in einer Anwendung, die ich erstelle.OmniAuth RailsCast (Folge 235) Problem mit Remind Me (Folge 274)

[Referenz: http://railscasts.com/episodes/274-remember-me-reset-password?view=comments] Ich wollte seine OmniAuth-Funktionalität für die gleiche Anwendung vorstellen.

[Referenz: http://railscasts.com/episodes/235-omniauth-part-1] Ich verwende nicht Devise. Ich lade die Twitter App-Seite korrekt, der Fehler tritt auf, wenn ich zurück zu meiner Anwendung umadressiere. Ich habe die Rückruf-URL in Twitter korrekt eingestellt.

Ich bekomme einen undefined method "authentications" for nil:NilClass Fehler mit OmniAuth und meinem authentications_controller. Insbesondere meine Konsole lautet:

NoMethodError (undefined method authentications for nil:NilClass):app/controllers/authentications_controller.rb:9:in create'.

Hier ist der Authentifizierungen Controller-Code:

class AuthenticationsController < ApplicationController 

    def index 
    authentications = Authentication.all 
    end 

    def create 
    auth = request.env["omniauth.auth"] 
    current_user.authentications.create(:provider => auth['provider'], :uid => auth['uid']) 
    flash[:notice] = "Authentication was successful." 
    redirect_to authentications_url 
    end 

Hier ist die current_user Hilfsmethode in meine Anwendungen-Controller.

private 
    def current_user 
    @current_user ||= User.find_by_auth_token!(cookies[:auth_token]) if cookies[:auth_token] 
    end 
    helper_method :current_user 

Benutzer hat viele Authentifizierungen. Authentifizierungen gehören dem Benutzer.

Ich mag OmniAuth ermöglichen, mit Twitter zu arbeiten, so dass Benutzer durch die Vermeidung der Fehler mit ihrem Twitter-Account anmelden können Ich erhalte während meines current_user Code Aufrechterhaltung

Hilfe sehr geschätzt wird.

Antwort

0

Sie berücksichtigen nicht den Fall, in dem der Benutzer nicht angemeldet ist. Was Sie in Ihrer Aktion create tun, ist die Verknüpfung des Benutzerkontos auf Ihrer Website mit seinem Konto auf Twitter.

Sie können current_user nicht verwenden, ohne sicherzustellen, dass der Benutzer angemeldet ist. Andernfalls wird nil zurückgegeben, und deshalb heißt es undefined method authentications for nil:NilClass.

einen Blick auf die nächste Railscast nehmen, die in mehr Details geht: http://railscasts.com/episodes/236-omniauth-part-2