Подтвердить что ты не робот

Рекомендации по проверке подлинности ember?

Есть ли у кого-нибудь опыт создания механизма аутентификации с новым маршрутизатором в pre4?

Вот некоторые из моих мыслей:

  • Чтобы полностью отделить представление (приложение Ember) от сервера (приложение Rails), я хочу использовать аутентификацию по токенам. Я, скорее всего, буду использовать Devise на сервере Rails.
  • Мне нужно что-то вроде эквивалента before_filter в приложении Ember, где я могу проверить, есть ли текущий пользователь, и если у этого пользователя установлен токен аутентификации.
  • Сервер Rails возвращает текущий токен аутентификации при каждом вызове. Если он возвращает нулевой токен аутентификации, приложение Ember должно обнаружить это и перейти в состояние неавторизованного доступа, перенаправляя его в окно входа в систему.

Я подозреваю, что для этого я должен использовать машину состояний Ember, но я не уверен, как действовать дальше. Кто-нибудь еще решил эту проблему?

4b9b3361

Ответ 1

ОБНОВЛЕНИЕ: Как @DustMason говорит в своем ответе, просмотрите удивительный embercasts для наилучших методов проверки подлинности.

Чтобы полностью отделить представление (приложение Ember) от сервера (приложение Rails), я хочу использовать аутентификацию по токенам. Я, скорее всего, буду использовать Devise на сервере Rails.

Имеет смысл.

Мне нужно что-то вроде эквивалента before_filter в приложении Ember, где я могу проверить, есть ли текущий пользователь, и если у этого пользователя установлен токен аутентификации.

Вы можете добавить крюк enter на маршруты, это примерно эквивалентно значению before_filter. Но не уверен, что лучшее место для проверки подлинника-токена.

Сервер Rails возвращает текущий токен аутентификации при каждом вызове.

Имеет смысл. Мы используем cookie-auth и выбираем текущий профиль пользователя, вызывая /api/me, но оба должны работать.

Если он возвращает нулевой токен аутентификации, приложение Ember должно обнаружить это и перейти в состояние неавторизованного доступа, перенаправляя его в окно входа.

Дело в том, что (в отличие от рельсов) нелегко "защищать" доступ к определенным маршрутам эмбер. И независимо от того, что пользователь всегда может открыть открытую консоль JS и ввести любое состояние, которое они хотят. Поэтому вместо того, чтобы думать: "пользователь может войти в это состояние только в том случае, если он прошел проверку подлинности", подумайте "что, если неавторизованный пользователь каким-то образом перейдет к этому маршруту"

Я подозреваю, что для этого я должен использовать машину состояний Ember, но я не уверен, как действовать дальше. Кто-нибудь еще решил эту проблему?

Наши потребности в авторизации довольно просты, поэтому мы не нашли нужную конечную машину. Вместо этого у нас есть свойство isAuthenticated на ApplicationController. Мы используем это свойство в application.hbs, чтобы заменить основное представление формой входа, когда пользователь не аутентифицирован.

{{if isAuthenticated}}
  {{render "topnav"}}
  {{outlet}}
{{else}}
  {{render "login"}}
{{/if}}

Из ApplicationRoute мы получаем профиль пользователя:

App.ApplicationRoute = Ember.Route.extend({
  model: function() {
    var profiles;
    profiles = App.Profile.find({ alias: 'me' });
    profiles.on("didLoad", function() {
      return profiles.resolve(profiles.get("firstObject"));
    });
    return profiles;
  }
});

Затем наш ApplicationController вычисляет свойство isAuthenticated, основанное на возвращенном профиле.

Ответ 2

Я бы предложил использовать ember-auth. Он реализует все необходимые функции и работает очень хорошо, на мой взгляд.

Также существует демонстрация с помощью Devise on Rails тем же автором.

Я также внедрил базовое приложение Ember на основе Ember-auth с аутентификацией маркера Devise и примером Oauth для Google и LinkedIn, которые можно найти здесь и здесь живут: https://starter-app.herokuapp.com

Ответ 3

Недавно я перешел из системы auth на заказ, используя ember-simple-auth, и мне было очень легко интегрироваться с моим приложением. Он выполняет все требования OP и также поддерживает поддержку токенов обновления.

У них действительно хороший API и отличный набор примеров. Любой, кто заинтересован в аутентификации на токенах, должен проверить его.

Ответ 4

Недавно выпущенный асинхронный маршрутизатор Ember упрощает настройку хорошего потока auth на мой взгляд! Посмотрите серию из двух частей на http://www.embercasts.com/ для хорошего примера

Ответ 5

Хосеп пример приложения действительно приятный. Я сделал копию своего репо, чтобы показать, как это сделать с помощью ActiveRecord вместо mongoid, а также включить модуль подтверждения Devise. Вы можете найти здесь здесь. Это репо было реконструировано с нуля, а не раздвоено, поскольку я хотел заставить себя пройти все шаги, чтобы заставить его работать. Я обновлю этот ответ, если я добавлю вилку с необходимыми изменениями, чтобы заставить ее работать.