2日悩んでます。
###前提・実現したいこと
facebookのログイン認証を実装したのですが、思うような機能をしてくれないので
ご相談させていただきます。
###発生している問題・エラーメッセージ
下記、コードの条件分岐が何度繰り返してもelseになり、
登録画面にリダイレクトされてしまいます。
どうして、@user.persisted?がfalseになってしまうのかを知りたいです。
①一度、認証リンクを押しました。
そこで、facebookページに飛び、ログインせずにキャンセルを押してしまったので、
elseになってしまうのでしょうか?
②もう一つのモデル(deviseの複数モデルで開発してます)では、facebookページに飛び、ログインをしたのですが、エラーがありうまく認証できませんでした。
もう一度認証を試すと、elseでリダイレクトコースです…
Ruby
1 def facebook 2 # You need to implement the method below in your model (e.g. app/models/user.rb) 3 @user = User.from_omniauth(request.env["omniauth.auth"]) 4 5 if @user.persisted? ←★なぜfalseになってしまうのか?★ 6 sign_in_and_redirect @user, :event => :authentication #this will throw if @user is not activated 7 set_flash_message(:notice, :success, :kind => "Facebook") if is_navigational_format? 8 else ←★すべて条件分岐先がelseになってしまう。★ 9 session["devise.facebook_data"] = request.env["omniauth.auth"] 10 redirect_to new_user_registration_url 11 end 12 end
###試したこと
①persisted?をリファレンスで確認したところ、新しいレコードかどうかをチェックするとありました。そこで、rake db:migrate:resetでデータベースを削除してもう一度、ログイン認証を試しましたがリダイレクトされてしまいました。
②facebookアプリに何か問題があるのかと思いましたので、別のアプリを製作し、IDとPASSを差し替えましたが効果なしです。
③情報追加部分のメソッド内にuser.saveを追加しました。しかし、リダイレクト現象は解決しませんでした。
###補足情報(言語/FW/ツール等のバージョンなど)
①開発環境です。
②deviseを使い複数モデルを作っています。
③参考サイト
Rails4でOmniAuthを使用したFacebookログイン機能を実装する
OmniAuthでFacebook認証を複数のモデルで使う
既存のDevise認証アプリに OmniAuth認証を追加する
Railsのログイン認証gemのDeviseとOmniAuth-Twitterの連携(Twitterでログインする)
④validationはかけていません。
よろしくお願いします!
###情報追加
★maisumakunさんへ★
【user.rb】
ruby
1 def self.from_omniauth(auth) 2 where(provider: auth.provider, uid: auth.uid).first_or_create do |user| 3 user.email = auth.info.email 4 user.password = Devise.friendly_token[0,20] 5 end 6end
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/11/05 09:11
2016/11/05 09:16
2016/11/05 09:24