Ruby on rails 强制Omniauth使用json进行回调?

Ruby on rails 强制Omniauth使用json进行回调?,ruby-on-rails,json,omniauth,Ruby On Rails,Json,Omniauth,我试图将Omniauth集成到用rails编写的API中,供Android应用程序使用。这意味着我希望能够使用JSON处理omniauth回调 默认情况下,Omniauth将其回调发送到/auth/:provider/callback,是否有一种方法可以强制Omniauth将其回调发送到/auth/:provider/callback.json?您可以指定处理回调的操作格式: # in route.rb match '/auth/:provider/callback' => 'authen

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


默认情况下,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
route.rb中的
#
匹配'/auth/:提供程序/回调'=>'身份验证#创建'
#在身份验证中\u controller.rb
类身份验证控制器<应用程序控制器
def创建
#你的代码在这里
回应待办事项|格式|
format.json{…}#要返回的内容
结束
结束
结束

我通过检查rails后端的请求对象成功地做到了这一点

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

format: "json"
然后omniauth对

/auth/:provider/callback
我的箱子里的三明治是相配的

sessions#create
作为HTML请求。但是一旦到达那里,如果您查看rails中的请求对象,并搜索omniauth.params散列,您将看到其中一个值是传递给初始请求数据的格式:

"omniauth.params"=>{"format"=>"json", "provider"=>"facebook", "code"=>"..."} 
搜索这个“格式”=>“json”并将json呈现为answear是一种很好的方法

我希望它能解决你的问题

# 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。不,我没有,我应该把这个放在哪里?试着用
:content\u type=>:json,:accept=>:json来模拟对
/auth/:provider/callback
的身份验证请求。我认为我没有正确地解释这个问题。我知道如何发出和响应json请求,但不知道如何让oauth提供者为回调请求json响应如果您在访问正确的参数时遇到任何问题,我会这样做:request.env['omniauth.params']['format'],它会给我json。