7

CONTEXT:Эмблема аутентификации Ember.js для Ember-Data + AMS => JSON или HTTP Header?

У меня есть приложение Ember.js 1.1.0-beta.1, которое обменивается данными JSON с сервером Rails-API (Rails 4). Обмен данными JSON осуществляется с помощью Ember-Data 1.0.0-beta.2 и Active Serializers 0.8.1 (AMS). Я использую рекомендованные по умолчанию конфигурации как для Ember-Data, так и для AMS и совместим со спецификацией JSON-API.

При любом вызове RESTful клиент передает текущий токен аутентификации на сервер. Маркер аутентификации проверяется и удаляется, а новый токен аутентификации генерируется и отправляется обратно клиенту. Таким образом, каждый вызов RESTful принимает маркер аутентификации в запросе и предоставляет новый токен аутентификации в ответе, который клиент может кэшировать и использовать для следующего вызова RESTful.

ВОПРОС:

Где поставить маркер аутентификации в каждом запросе и ответе?

Должно ли оно быть частью JSON каждого объекта в запросе и ответе? Если да, то где токен, помещенный в структуру JSON существующего объекта (который не имеет ничего общего с аутентификацией)?

Или они должны быть помещены в HTTP-заголовок для каждого объекта запроса и ответа?

Что такое «Ужасный путь», который, возможно, в конечном итоге ожидает найти в новой поваренной книге Ember Guides?

MORE КОНТЕКСТ:

Я уже знакомы со следующими ссылками:

... и я ищу ответы, которые выходят за рамки этих, и относятся к Ember-Data + AMS.

За исключением необходимости пройти новый маркер обратно клиенту в ответ через Ember-Data, предположит, что мой код клиента иначе похож на @machty пример Embercast на GitHub: https://github.com/embercasts/authentication-part-2/blob/master/public/js/app.js

Спасибо очень!

ответ

2

Я построил нечто подобное, хотя я не сбрасываю токен, если пользователь не выберет.

Я бы не поместил его в тело запроса - вы просто собираетесь загрязнять свои модели. Вероятно, нет пути Ember, поскольку это больше связано с транспортом. Я передаю токен, используя собственный HTTP-заголовок и/или файл cookie. Файл cookie необходим для авторизации загрузки файлов, что невозможно сделать с помощью ajax, хотя cookie также работает для вызовов ajax. В вашем случае я бы использовал файл cookie и каждый раз задавал ему новое значение. Однако ваша схема сброса токена по каждому запросу JSON не будет работать с одновременными запросами. Это действительно необходимо? Если вы используете TLS, вам, вероятно, не нужно так беспокоиться. Вы также можете отключить токен, чтобы, если в течение 10 минут не было запросов, генерируется новый токен.

3

У меня есть аналогичный стек - ember, ember-data и rails-api с AMS. Прямо сейчас, я просто передаю токен аутентификации (который храню в localStorage) в заголовке (хотя вы можете передать его в строке запроса), изменив метод ajax.

Первоначальная мысль заключалась в том, чтобы избежать сброса токена по каждому запросу. Если вас особенно беспокоит то, что токен был обнюхал, проще было бы просто сбросить токен на сервере с регулярным интервалом (скажем, 10 минут). Затем, если какой-либо запрос от клиента завершился неудачно из-за старого токена, просто выберите новый токен (передав токен «повтор», который ваш сервер дает вам при входе в систему) и повторите первоначальный запрос.

Что касается того, где поставить маркер, на самом деле нет «Ember Way» - я предпочитаю передавать его в заголовке, поскольку передача его в строке запроса может испортить кеширование и, скорее всего, будет записываться где-то по пути. Я бы, конечно, не пропустил его в теле запроса - это будет противоречить тому, что ожидаются данные ember-данных.