2013-01-24 10 views
13

Devise gemを認証に使用しているWebアプリケーション(APIもあります)を構築しており、APIパーツの認証にDoorkeeper gemも使用しています。DeviseとDoorkeeperの両方の宝石を使用するには?

問題は、私はのOAuth2コード(及びログイン)を受信するためのURLに行くとき、私は、Webアプリケーションではなく、クライアントコールバックURLにリダイレクトさだということになりました。私がする必要がどのような

はOAuthの使用時に通常にし、コールバックURLに署名する際に、Webアプリケーションにリダイレクトされます。

どうすればいいですか?私はDeviseセッションコントローラを上書きしていますが、何を入れるべきかわかりません。

これは私のコードです:

def new 
    session[:return_to] = params[:return_to] if params[:return_to] 
    resource = build_resource 
    clean_up_passwords(resource) 
    end 

    def create 
    resource = warden.authenticate!(auth_options) 
    sign_in(resource_name, resource) 
    if session[:return_to] 
     redirect_to session[:return_to] 
     session[:return_to] = nil 
    else 
     respond_with resource, :location => after_sign_in_path_for(resource) 
    end 
    end 

問題は工夫が私のリダイレクトロジックを無視しているようだということです。

さらにアドバイスをしてください。これはApplicationControllerに(考案のコントローラから継承すること)で、私のために働いた

resource_owner_authenticator do 
    #raise "Please configure doorkeeper resource_owner_authenticator block located in #{__FILE__}" 
    # Put your resource owner authentication logic here. 
    # Example implementation: 
    session[:user_return_to] = request.fullpath 
    current_user || redirect_to(login_url) 
end 

答えて

11

def store_location 
    # store last url as long as it isn't a /users path 
    session[:previous_url] = request.fullpath unless request.fullpath =~ /\/users/ 
end 

def after_sign_in_path_for(_resource) 
    session[:previous_url] || root_path 
end 

そして、ドアキーパ初期設定:

resource_owner_authenticator do 
    if user_signed_in? 
    current_user 
    else 
    session[:previous_url] = request.fullpath unless request.fullpath =~ /\/users/ 
    redirect_to(new_user_session_path) 
    end 

エンド

アイデアは、あなたがセッションクッキーでから来た道を覚えて、それが自身のafter_sign_in_path_forコールバックを呼び出すときに工夫がリダイレクトさせることです。

Documentationは、セッション鍵をresource_return_toと指摘しましたが、これは私のために働いたので、私はもう検討しませんでした。

+0

'login_url'が...これは私の円形のリダイレクトを与えた –

+0

' new_user_session_url'ことが、私はそれを解決なかった方法についての私の答えを参照してください可能性があります。 – zmilojko

2

:あなたのリソースがブロック

例をresource_owner_authenticatorするsession[:user_return_to] = request.fullpathを追加userであると仮定すると、

+0

それが原因U2Fと工夫の私の実装が、私のセッションに、多分だった[:previous_url]たafter_sign_in_path_forので、私は、私は同様の問題に直面しています – phyzalis

+0

@phyzalisは、どのようにあなたは、クッキーとそれを解決しなかった代わりに、セッションのクッキーを使用中に、空の? –

+0

私は 'after_sign_in_path_for'の中でsuperを使って回避することができました。 ' session [:previous_url] || super' –

関連する問題