sedovalx / taxi

6 stars 3 forks source link

Реализовать клиентскую аутентификацию #18

Closed sedovalx closed 9 years ago

sedovalx commented 9 years ago

Сейчас аутентификация происходит на сервере. Страница с логином/паролем - это серверная страница, по факту - отдельное приложение. Клиент же не имеет представления о сессии, текущем пользователе и пр. Аутентификационная информация сохранятется в cookie. На клиенте нам все равно нужен доступ к текущему пользователю, поэтому нужно сделать правильно.

Предлагается на клиенте использовать библиотеку ember-simple-auth с кастомным аутентификатором.

Как реализовать серверную часть кастомной аутентификации мне пока неясно.

Серверная token-аутентификация: https://github.com/jamesward/play-rest-security Видео по клиентской аутентификации: http://www.embercasts.com/episodes/client-side-authentication-part-1 Статья по клиентской token-аутентификации: http://webcloud.info/blog/2014/04/07/emberjs-authentication-the-right-way-javascript-version/

Теория о JWT: https://stormpath.com/blog/token-auth-spa/

Серверная JWT-аутентификация на базе Silhouette: https://github.com/merle-/silhouette-rest-seed

Вероятный выбор: Клиент - https://github.com/jpadilla/ember-cli-simple-auth-token Сервер - https://github.com/merle-/silhouette-rest-seed

sedovalx commented 9 years ago

Вроде бы готово. Для сервера был выбран Play Silhouette Для клиента - ember-simple-auth Из-за того, что первый передает и принимает токены в заголовке сообщений, а второй - то в заголовке, то в теле, пришлось немного поработать напильником и скотчем. Это совсем нехорошо, но другого выхода не нашел. Возможно что-то допилят создатели библиотек либо там, либо там

Осталось описать теорию.

sedovalx commented 9 years ago
  1. При выходе нужно вызывать серверный метод /api/auth/logout
  2. На странице с логином поля нужно перенести в центр по вертикали, а сообщение об ошибке выводить сверху.
sedovalx commented 9 years ago

В результате реализации были добавлены зависимости как от серверных, так и от клиентских библиотек. Поэтому на сервере нужно выполнить перекомпилирование, чтобы подтянулись нужные зависимости. На клиенте же нужно выполнить установку отсутствующих bower и npm пакетов.

sedovalx commented 9 years ago

Закрываю, все вроде бы работает.