【发布时间】:2013-05-17 16:11:55
【问题描述】:
在阅读Stored Android Accounts for Authentication of Rails + Devise Accounts 之后,我正在尝试设置一个 Rails 3 API 端点,该端点可以通过对 Google 的 GET 请求验证 OAuth 获得的令牌。
我已将路线配置为:
namespace :api, defaults: {format: :json} do
namespace :v1 do
get 'auth/verify' => 'omniauth_verifications#verify_token'
...
end
end
在api/v1/omniauth_verifications_controller.rb 中,我将方法定义为:
respond_to :json
def verify_token
token = params[:token]
response = RestClient.get("https://www.googleapis.com/oauth2/v2/userinfo", { params: { access_token: token }})
if response.code == 200
data = JSON.parse(response.to_s)
@user = User.find_for_verfied_token_response(data.symbolize_keys)
end
respond_with @user
end
问题是,我在到达端点时得到的响应是 500 Internal Server Error 和 Template Missing 消息
如果我用RestClient.get 注释掉该行,而是使用respond_with User.find(1),则repsonse 为201,并按预期返回json 格式的用户对象。
为什么即使我明确告诉respond_with @user,Rails 仍坚持渲染模板? RestClient 是否接管了我的回复或发生了什么?
我也尝试在RestClient.get 之后引发异常,但输出仍然是Template Missing。
【问题讨论】:
标签: ruby-on-rails ruby json api rest