条件分岐中のpersisted?をtrueにできない
はじめまして。
前提・実現したいこと
facebookのログイン認証を実装したのですが、思うような機能をしてくれないので
ご相談させていただきます。
発生している問題・エラーメッセージ
下記、コードの条件分岐が何度繰り返してもelseになり、
登録画面にリダイレクトされてしまいます。
どうして、@user.persisted?がfalseになってしまうのかを知りたいです。
①一度、認証リンクを押しました。
そこで、facebookページに飛び、ログインせずにキャンセルを押してしまったので、
elseになってしまうのでしょうか?
②もう一つのモデル(deviseの複数モデルで開発してます)では、facebookページに飛び、ログインをしたのですが、エラーがありうまく認証できませんでした。
もう一度認証を試すと、elseでリダイレクトコースです…
def facebook
# 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? ←★なぜfalseになってしまうのか?★
sign_in_and_redirect @user, :event => :authentication #this will throw if @user is not activated
set_flash_message(:notice, :success, :kind => "Facebook") if
is_navigational_format?
else ←★すべて条件分岐先がelseになってしまう。★
session["devise.facebook_data"] = request.env["omniauth.auth"]
redirect_to new_user_registration_url
end
end
試したこと
・persisted?をリファレンスで確認したところ、新しいレコードかどうかをチェックするとありました。そこで、rake db:migrate:resetでデータベースを削除してもう一度、ログイン認証を試しましたがリダイレクトされてしまいました。
補足情報(言語/FW/ツール等のバージョンなど)
①開発環境です。
②deviseを使い複数モデルを作っています。
③参考サイト
Rails4でOmniAuthを使用したFacebookログイン機能を実装する
OmniAuthでFacebook認証を複数のモデルで使う
既存のDevise認証アプリに OmniAuth認証を追加する
Railsのログイン認証gemのDeviseとOmniAuth-Twitterの連携(Twitterでログインする)
よろしくお願いします!
情報追加
【user.rb】
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]
end
end