2013-07-12 47 views
4

我試圖將Omniauth集成到一個用rails編寫的API中,供Android應用程序使用。這意味着我希望能夠使用JSON處理omniauth回調。強制Omniauth使用json進行回調?

默認情況下,Omniauth將其回調發送到/auth/:provider/callback,有沒有一種方法可以讓Omniauth將其回調函數發送到/auth/:provider/callback.json

回答

2

其中處理回調可以指定在行動格式:

# in route.rb 
match '/auth/:provider/callback' => 'authentications#create' 

# in authentications_controller.rb 
class AuthenticationsController < ApplicationController 
    def create 
    # your code here 
    respond_to do |format| 
     format.json { ... } # content to return 
    end 
    end 
end 
+0

這將是處理這樣的請求的代碼,是的,但我的問題是,默認情況下,Omniauth從不發送任何指定格式爲json的請求,它總是html。 – maxluzuriaga

+0

你試過用Accept頭嗎? –

+0

不,我沒有,我會在哪裏放這個? – maxluzuriaga

2

我沒做到這一點通過檢查我的導軌後端請求對象。

當我做我的應用程序的要求,我想補充的submition定義格式的數據:

format: "json" 

然後是omniauth使得我的情況下,回調

/auth/:provider/callback 

至極匹配

sessions#create 

作爲HTML請求。但一旦發生,如果你看一下在軌道您的要求的對象,並搜索omniauth.params哈希你會看到的一個值出現在初始請求塔數據傳遞的格式:

"omniauth.params"=>{"format"=>"json", "provider"=>"facebook", "code"=>"..."} 

它是你搜索這個「格式」=>「json」和做一個渲染json作爲answear的mather。

我希望它能解決您的問題。

+0

如果您在訪問正確的參數時遇到任何問題,我這樣做:request.env ['omniauth .params'] ['format'],它給了我json。 – RuiMochila

0
# app/controllers/users_controller.rb 
def authenticate 
    @credentials = request.env['omniauth.auth'] 
    render json: @credentials 
end 

# config/routes.rb 
get '/auth/:provider/callback', to: 'users#authenticate', as: 'user_auth' 

然後所有對/auth/:provider/callback的請求默認會返回一個JSON響應。