1

認証にdeviseとomniauthを使用するRailsアプリケーション。Facebookユーザーのみが許可されています。Facebook ログインはうまく機能し、omniauth コールバックもうまく機能しています。

私のGemfileには、とりわけ基本的なものが含まれています:

gem 'devise'
gem 'omniauth'
gem 'omniauth-facebook'

私の「本」View Controllerでは、デバイス認証を追加しました:

class BooksController < ApplicationController
before_filter :authenticate_user!

問題: ユーザーが authenticate_user! 失敗すると、devise は sign_in ページ (ユーザーがユーザー名、電子メール、パスワード、確認を入力するページ) にリダイレクトしています。Facebookユーザーのみが必要なため、この動作は望ましくありません。authenticate_user が失敗した場合、Facebook ログインにリダイレクトするように工夫する必要があります。

ユーザーが認証されていないときにデバイスをFacebookログインにリダイレクトする方法は?

4

3 に答える 3

4

最善の方法は、 a を使用して関数custom devise failure appをオーバーライドするredirectことです。

以下のようなものが動作します:

  1. のようなイニシャライザを作成しますcustom_failure_app.rb
  2. CustomFailureAppを継承するクラスを作成します。Devise::FailureApp
  3. 関数をオーバーライドしredirectます。

    class CustomFailureApp < Devise::FailureApp
    
      # will be called wen some failure occurs. 
      # Like unauthorized, session_expiry etc
      def redirect 
        message = warden.message || warden_options[:message]
        if message == :timeout
            # session expires
        else
            # unauthorized
            # redirect_to "facebook.com"
        end
      end
    end
    
  4. 次のような別のイニシャライザを追加しdevise.rb、その中に次のコードを入れます。

    Devise.setup do |config|
      config.warden do |manager|
        manager.failure_app = CustomFailureApp
      end
    end
    
于 2012-11-23T17:10:52.210 に答える
0

追加してみることができます

match '/auth/failure', :to => 'your_controller#failure'

あなたroutes.rbのコントローラー内の失敗メソッド内からリダイレクトします。

于 2012-11-23T16:59:20.717 に答える