Ruby on rails 强制Omniauth使用json进行回调?
我试图将Omniauth集成到用rails编写的API中,供Android应用程序使用。这意味着我希望能够使用JSON处理omniauth回调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将其回调发送到
/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。