我試圖將Omniauth集成到一個用rails編寫的API中,供Android應用程序使用。這意味着我希望能夠使用JSON處理omniauth回調。強制Omniauth使用json進行回調?
默認情況下,Omniauth將其回調發送到/auth/:provider/callback
,有沒有一種方法可以讓Omniauth將其回調函數發送到/auth/:provider/callback.json
?
我試圖將Omniauth集成到一個用rails編寫的API中,供Android應用程序使用。這意味着我希望能夠使用JSON處理omniauth回調。強制Omniauth使用json進行回調?
默認情況下,Omniauth將其回調發送到/auth/:provider/callback
,有沒有一種方法可以讓Omniauth將其回調函數發送到/auth/:provider/callback.json
?
其中處理回調可以指定在行動格式:
# 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
我沒做到這一點通過檢查我的導軌後端請求對象。
當我做我的應用程序的要求,我想補充的submition定義格式的數據:
format: "json"
然後是omniauth使得我的情況下,回調
/auth/:provider/callback
至極匹配
sessions#create
作爲HTML請求。但一旦發生,如果你看一下在軌道您的要求的對象,並搜索omniauth.params哈希你會看到的一個值出現在初始請求塔數據傳遞的格式:
"omniauth.params"=>{"format"=>"json", "provider"=>"facebook", "code"=>"..."}
它是你搜索這個「格式」=>「json」和做一個渲染json作爲answear的mather。
我希望它能解決您的問題。
如果您在訪問正確的參數時遇到任何問題,我這樣做:request.env ['omniauth .params'] ['format'],它給了我json。 – RuiMochila
# 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響應。
這將是處理這樣的請求的代碼,是的,但我的問題是,默認情況下,Omniauth從不發送任何指定格式爲json的請求,它總是html。 – maxluzuriaga
你試過用Accept頭嗎? –
不,我沒有,我會在哪裏放這個? – maxluzuriaga