最初のシナリオ
コントローラ
class Api::V1::AuthsController < Devise::OmniauthCallbacksController
def twitter; end
private
def callback
user = User.find_or_authenticate_by_oauth(request.env["omniauth.auth"], session['beta_signup_token'])
if session['beta_signup_token']
render json: {redirect: :complete_profile}
else
render json: {redirect: :stories}
end
end
end
ルート
namespace :api do
namespace :v1 do
devise_scope :user do
match 'auth/:provider' => 'auths#passthru', constraints: { format: :json }
match 'auth/:provider/callback', to: 'auths#callback', constraints: { format: :json }
end
end
end
応答
Started GET "/api/v1/auth/twitter.json" for 127.0.0.1 at 2013-04-02 14:43:32 -0500
Processing by Api::V1::AuthsController#passthru as JSON
Parameters: {"provider"=>"twitter"}
Rendered text template (0.0ms)
Completed 404 Not Found in 4ms (Views: 0.5ms | ActiveRecord: 0.0ms)
2 番目のシナリオ
コントローラ
class Users::OmniauthCallbacksController < Devise::OmniauthCallbacksController
before_filter :handle_authentication
def facebook
end
def twitter
end
def linkedin
end
private
def handle_authentication
user = User.find_or_authenticate_by_oauth(request.env["omniauth.auth"], session['beta_signup_token'])
if session['beta_signup_token']
redirect_to setup_profile_beta_invite_url(session['beta_signup_token'])
else
sign_in_and_redirect
end
end
end
ルート
devise_for :users, constraints: { format: :html },
:controllers => { :omniauth_callbacks => "users/omniauth_callbacks" }
応答
(twitter) Callback phase initiated.
Started GET "/users/auth/twitter" for 127.0.0.1 at 2013-04-02 15:40:04 -0500
私の質問
最初の応答を 2 番目の応答と同じにするにはどうすればよいですか? 最初のもので、Twitter戦略が呼び出されていないのはなぜですか?
私の他の質問は関連していると思います