14

認証にDevise gemを使用しているWebアプリ(APIも使用)を構築しており、API部分の認証にもDoorkeeper gemを使用しています。

問題は、Oauth2 コードを受信する (およびログインする) ための URL に移動すると、クライアントのコールバック URL ではなく Web アプリにリダイレクトされることです。

私がする必要があるのは、通常のサインイン時に Web アプリにリダイレクトし、Oauth を使用するときにコールバック URL にリダイレクトすることです。

これどうやってするの?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

問題は、Devise が私のリダイレクト ロジックを無視しているように見えることです。

さらにアドバイスをください。

4

2 に答える 2

4

これは、ApplicationController(Deviseのコントローラーが継承するもの)で私にとってはうまくいきました:

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

そして Doorkeeper イニシャライザで:

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

終わり

アイデアは、セッション Cookie で元のパスを記憶し、Devise が独自のafter_sign_in_path_forコールバックを呼び出したときにそこにリダイレクトするようにすることです。

ドキュメントはセッションキーを指摘していましたresource_return_toが、これは私にとってはうまくいったので、もう調べませんでした。

于 2015-11-07T19:09:06.220 に答える