2017-02-07 3 views
0

В моем Rails-приложении апи I'am использование Devise камня, который при проверке подлинности возвращает всю важную информацию (Access-Токен, UID, клиент и т.д.) в заголовках, например:Есть ли способ переместить ответ Deviser на тело?

Access-Token →DIbgreortZbCYKqzC8HdNg 
Client →Y6J5oTIqS7Gc_-h9xynBQ 
Uid →[email protected] 

Я хочу, чтобы те, чтобы быть в орган реагирования. Есть ли способ достичь этого?

ответ

0

Rails предоставляет вам объект запроса, чтобы вы могли захватить все, что вам нужно, из заголовков вашего контроллера.

def some_action 
    @mime_type = request.headers["Content-Type"] # => "text/plain" 
    @token = request.headers["key-for-your-token-here"] 
end 

Вы можете либо передать его на ваш взгляд, или вы можете вставить его в тело ответа через request.body как вы бы вставить любой ключ/значение пары в хэш.

Документация для ActionDispatch :: Запрос здесь: http://api.rubyonrails.org/classes/ActionDispatch/Request.html#method-i-headers

UPDATE:

сделать пользовательский метод и посмотреть, как долго он должен работать, чтобы перемещаться хэш заголовка. Если долго вы можете использовать его, чтобы найти точное гнездо того, что вы ищете, и изменить его.

def find_token(parent, request.headers) 
    request.headers.each {|key, value| 
    if value.is_a?(Hash) 
     find_token(key, value) 
    elsif key == 'THE TOKEN KEY HERE' 
     return value 
    else 
     next 
    end 
    } 
end 
+0

, когда я 'request.headers [ "доступ-маркер"]' возвращает 'nil' но результат корректен с' request.headers [ "Content-Type"] ' –

+0

Это означает, что вы» не получив правильного ключа. Сам ключ может быть вложен. Добавьте инструкцию puts для request.headers в свой контроллер и вставьте ее на свой вопрос, чтобы мы могли видеть. – bkunzi01

+0

Результат выглядит так. Невозможно получить доступ к токену любым способом https://pp.vk.me/c638121/v638121746/239b4/PF4NFzGBTio.jpg –