はじめまして。

前提・実現したいこと

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