2012-11-23 1 views
0

devise 및 omniauth를 인증에 사용하는 레일 응용 프로그램입니다. 페이스 북 사용자 만 허용됩니다. Facebook 로그인이 잘 작동하고, omniauth 콜백이 잘 작동합니다.사용자가 인증되지 않은 경우 devise 리디렉션을 Facebook 로그인으로 만드는 방법은 무엇입니까?

내 Gemfile 다른 가운데, 기본 포함 :

class BooksController < ApplicationController 
before_filter :authenticate_user! 

문제 : 사용자 authenticate_user 내 "책"뷰 컨트롤러에서

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

, 난 유증 인증을 추가했습니다! 실패하면 devis가 sign_in 페이지 (사용자 유형 사용자 이름, 전자 메일, 암호, 확인)에 리디렉션됩니다. 나는 단지 페이스 북 사용자를 원하기 때문에 나는이 행동을 원하지 않는다. authenticate_user가 실패 할 경우 페이스 북 로그인으로 리디렉션해야합니다.

사용자가 인증되지 않았을 때 devise 리다이렉션을 페이스 북 로그인으로 만드는 방법은 무엇입니까?

+1

거의 동일한 질문을보십시오. http://stackoverflow.com/questions/5832631/devise-redirect-after-login-fail – Santosh

답변

3

가장 좋은 방법은 custom devise failure app을 사용하고 redirect 기능을 재정의하는 것입니다. 다음과 같은

뭔가 작동합니다

  1. custom_failure_app.rb 같은 것을 초기화를 만듭니다.
  2. Devise::FailureApp
  3. 오버라이드에게 redirect 기능을 상속하는 클래스 CustomFailureApp를 만듭니다.

    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 
    
+0

감사합니다. 또한 이니셜 라이저 코드를 추가해야했습니다. config.warden do | manager | manager.failure_app = CustomFailure 단부 및 lib 디렉토리 주사 config.autoload_paths + = %의 W (# config.root {}/LIB) –

+0

가 그래가 필요하다. 내 대답을 업데이트 할게. –

+0

이 작업을 수행 할 수 없으며 여전히 로그인 페이지로 리디렉션됩니다. –

0

당신은 컨트롤러 내부의 실패 메소드 내에서 리디렉션 다음 routes.rb

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

를 추가하고 시도 할 수 있습니다.

+0

감사합니다. 예상대로 작동하지 않습니다. authenticate_user! 사용자가 아직 로그인하지 않았기 때문에 실패합니다./users/sign_in 및/auth/failure route가 호출되지 않습니다. –

관련 문제