2017-05-24 11 views
1

Error Message PictureOmniauthが動作していません:未定義のメソッド `persisted? 'なしの場合:NilClass

私は基本的に以下のリンクからの指示に正確に従いました。私はこの間違いのエラーを受け取りますか?私は何をすべきか分かりません。何らかの永続メソッドを作成する必要がありますか?このようないくつかの他の質問があり、それらのすべてを読んだ後、彼らはALLでは役に立たなかった。助けてください。

https://github.com/zquestz/omniauth-google-oauth2

Omniauthsコントローラ

class OmniauthCallbacksController < Devise::OmniauthCallbacksController 
    def google_oauth2 
    # You need to implement the method below in your model (e.g. app/models/user.rb) 
    @user = User.from_omniauth(request.env["omniauth.auth"]) 

    if @user.persisted? 
    flash[:notice] = I18n.t "devise.omniauth_callbacks.success", :kind => "Google" 
    sign_in_and_redirect @user, :event => :authentication 
    else 
    session["devise.google_data"] = request.env["omniauth.auth"].except(:extra) #Removing extra as it can overflow some session stores 
    redirect_to new_user_registration_url, alert: @user.errors.full_messages.join("\n") 
    end 
    end 
end 

Userモデルコードスニペット

def self.from_omniauth(access_token) 
data = access_token.info 
user = User.where(:email => data["email"]).first 
# Uncomment the section below if you want users to be created if they don't exist 
# unless user 
#  user = User.create(name: data["name"], 
#  email: data["email"], 
#  password: Devise.friendly_token[0,20] 
# ) 
# end 
    user 
end 

答えて

1

変更底部へ:

def self.from_omniauth(auth) 
    where(provider: auth.provider, uid: auth.uid).first_or_create do |user| 
    user.email = auth.info.email 
    user.password = Devise.friendly_token[0,20] 
    user.name = auth.info.name # assuming the user model has a name 
end 
end 

をrを実行しましたaddOmniauthToUsersプロバイダ:文字列uid:文字列

次に、Googleアカウントから正常に認証されました。

だから、今はうまくいくと思います。私はおそらく問題は私はプロバイダとuidをユーザーデータベースモデルに追加する必要があったと思いますか?

関連する問題