Ich fertige gerade eine Rails App an, und alles funktionierte gestern gut, (das meiste davon ist immer noch). Aber jetzt, wenn ich versuche, mich mit Facebook anzumelden, erhalte ich den Fehler NoMethodError undefined method persisted? for nil:NilClass
Ich habe keinen Code im omniauth_callbacks_controller oder im Benutzermodell geändert, also verstehe ich nicht, warum das plötzlich passiert.NoMethodError undefinierte Methode `persistent? ' für nil: NilClass bei der Anmeldung bei Facebook durch Omniauth/Devise?
Hier ist der Code in omniauth_callbacks_controller
def self.provides_callback_for(provider)
class_eval %Q{
def #{provider}
@user = User.from_omniauth(env["omniauth.auth"])
if @user.persisted?
sign_in_and_redirect @user, event: :authentication
set_flash_message(:notice, :success, kind: "#{provider}".capitalize) if is_navigational_format?
else
session["devise.#{provider}_data"] = env["omniauth.auth"]
redirect_to new_user_registration_url
end
end
}
end
[:twitter, :facebook].each do |provider|
provides_callback_for provider
end
Und in User.rb
def self.from_omniauth(auth)
identity = Identity.where(provider: auth.provider, uid: auth.uid).first_or_create do |identity|
if identity.user == nil
user = User.new
user.email = auth.info.email || "#{auth.uid}@#{auth.provider}.generated"
user.password = Devise.friendly_token[0,20]
user.provider = auth.provider
if auth.provider == "facebook"
user.name = auth.info.name
user.username = "FacebookUser" + (1 + rand(1000)).to_s
elsif auth.provider == "twitter"
user.name = auth.info.name
user.username = auth.info.nickname
end
end
identity.user = user
end
identity.access_token = auth['credentials']['token']
identity.refresh_token = auth['credentials']['refresh_token']
identity.expires_at = auth['credentials']['expires_at']
identity.timezone = auth['info']['timezone']
identity.save
identity.user
end
ich kann nicht herausfinden, warum es gestern funktionierte, aber es ist jetzt nicht. Nichts hat sich verändert! Ich greife immer noch von derselben URL aus darauf zu, ich habe mich nicht mit den API-Einstellungen auf Facebook oder in devise.rb beschäftigt.