2013-05-17 2 views
0

После прочтения Stored Android Accounts for Authentication of Rails + Devise Accounts Я пытаюсь настроить конечную точку API Rails 3, которая может проверить полученный токен OAuth через запрос GET в Google.Запрос GET внутри конечной точки POST API мешает «reply_with»

Я настроил маршрут как:

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) ответ 201 с пользовательским объектом json, отформатированным как ожидалось.

Почему Rails настаивает на рендеринг шаблона, хотя я прямо говорю об этом respond_with @user? Является ли RestClient принятием моего ответа или что происходит?

Я также попытался создать исключение после RestClient.get, но выход по-прежнему Template Missing.

ответ

0

я перешел на HTTParty драгоценный камень, который исправил проблему с запросом перекрывая respond_with.

Мне нужно было вернуться на площадку OAuth2, чтобы выяснить, что Google теперь также требует заголовок Authorization при запросе информации о пользователе.

Это то, что я закончил с:

def verify_token 
    token = params[:token] 

    response = HTTParty.get("https://www.googleapis.com/oauth2/v2/userinfo", headers: {"Access_token" => token, "Authorization" => "OAuth #{token}"}) 

    if response.code == 200 
    data = JSON.parse(response.body) 
    @user = User.find_for_verfied_token_response(data.symbolize_keys) 
    end 

    respond_with @user || {} 
end 
0
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) 

    render :json => @user.to_json 
    else 
    render :json => { } 
    end  
end 
+0

Да у меня есть, он по-прежнему отвечает '500 - Шаблон Error' – Jach0

+0

Я обновил свой код. Хотя я не думаю, что это работает. Он решает проблему, когда код ответа не равен 200. – jason328

Смежные вопросы