4

我正在尝试将 Omniauth 集成到用 Rails 编写的 API 中,以供 Android 应用程序使用。这意味着我希望能够使用 JSON 处理omniauth 回调。

默认情况下,Omniauth 将其回调发送到/auth/:provider/callback,有没有办法可以强制 Omniauth 将其回调发送到/auth/:provider/callback.json

4

3 回答 3

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
于 2013-07-12T03:19:55.173 回答
2

我设法通过检查我的 rails 后端上的请求对象来做到这一点。

当我在我的应用程序上提出请求时,我在提交中添加了定义格式的数据:

format: "json"

然后omniauth会回调

/auth/:provider/callback

在我的情况下匹配

sessions#create

作为 HTML 请求。但是一旦到了那里,如果你在 rails 中查看你的请求对象,并搜索 omniauth.params 哈希,你会看到其中一个值是初始请求的数据传递的格式:

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

它是您搜索此“格式”=>“json”并执行渲染 json 作为回答的问题。

我希望它能解决你的问题。

于 2014-01-06T11:02:10.333 回答
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 响应。

于 2015-04-03T21:21:16.447 回答