リダイレクトせずに OmniAuth プロバイダーから認証 URL を取得する方法

概要

/auth/twitter にアクセスしたときに、OmniAuth がリダイレクトする URL をどのように取得しますか?

API サーバーを構築していて、URL を JSON でクライアントに渡して、クライアントが URL で必要なことを何でもできるようにしたいと考えています。

私が欲しいのは、認証 URL のように見える戦略の request_phase の結果だと思いますが、それを新しいコントローラーで取得して次のようにするにはどうすればよいですか。

class MyOauthController < ApplicationController
  # GET /my_oauth/signin/twitter.json
  def signin
    url = ???
    render json: {signin_url: url}
  end

これを行うきれいな方法はありますか?

解決策

はい、Omniauth は次のようなヘルパー機能を提供します。

user_omniauth_authorize_path(key)
# for your case
user_omniauth_authorize_path("twitter")

Devise の概要を確認してください。