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

Аутентификация пользователя в приложениях Knockout.js

(Мне сказали в Twitter, что я слишком расплывчата, поэтому я попробую и отредактирую)

Я только начинаю использовать Knockout.js для приложения с PHP-back-end (API, который выплевывает результаты JSON). Части приложения потребуют от пользователей аутентификации для их использования (это приложение для голосования о том, кто "выиграл" конкретную транзакцию в фэнтезийной бейсбольной лиге)

Мне интересно, как люди обрабатывают аутентификацию с использованием API-интерфейсов на стороне сервера и фреймворков, таких как Knockout. Я могу легко написать PHP-код, который принимает учетные данные, проверяет их и возвращает ответ, который я просто не знаю, как поддерживать это состояние, когда пользователь "аутентифицирован" с помощью нокаута.

Добавьте к этому проблему сохранения этого "аутентифицированного состояния" на нескольких страницах, и мне интересно, как это будет возможно. В PHP вы можете хранить этот материал внутри сеанса или даже использовать файлы cookie.

У меня много опыта работы с PHP, поэтому я не беспокоюсь о части API этого небольшого проекта. Я новичок в Knockout.js(и на полпути между новичком и промежуточным звеном с Javascript), поэтому любые советы о том, как я могу это сделать, будут очень благодарны.

4b9b3361

Ответ 1

Не сохранять аутентифицированное состояние. Работайте с кодами ответов, как и с любым другим API.

В конечном счете бэкэнд-процесс (упрощенный до крайности) будет примерно таким:

  • Запрос от внешнего клиента/клиента
  • Требует ли этот запрос привилегии
    • Нет, goto 4
    • Да, goto 3
  • Определен ли пользователь
    • Нет, ответьте 401
    • Да, но имеет недостаточно привилегий, ответьте 403
    • Да, goto 4
  • Отправить ответ

На лицевой стороне/клиенте:

  • Отправить запрос API
  • Ответ HTTP 200
    • Да, goto 4
    • Нет, goto 3
  • Было ли это 401
    • Да, экран входа в систему
    • Нет, ошибка запуска
  • Показать результаты

Возможно, это не лучший дизайн UX, если вы внезапно столкнулись с экраном входа в систему. Это можно обойти, хотя, разрешив пользователю аутентифицироваться в любой момент времени, но не требуя его, пока это абсолютно необходимо. (И для максимальной гладкости вам нужно будет воспроизвести запрос, который был провален после успешной проверки подлинности.)

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

По сути, это то же самое, что хранить состояние, прошедшее проверку подлинности, но более прозрачно и ни в коем случае не предполагать, что состояние - это то, что говорит флаг. Скажем, например, что вы используете сеансы, которые вы храните в memcached, которые segfaults и перезапускаются. Это означает, что ваши сеансы исчезли, и никто, кто был аутентифицирован, больше не существует. Если ваш передний конец все еще имеет authenticated = true и полагается на него, материал будет ломаться.

UPDATE:

После сна в эту ночь я понимаю, что вы должны различать 401 и 403. Поскольку могут быть пользователи разных уровней, вам нужно 403, чтобы сообщить переднему концу/клиенту, что хотя этот пользователь может быть аутентифицирован, он все еще не является " t разрешенный доступ.

Ответ 2

Вы можете сохранить аутентифицированное состояние с помощью куки файла, отправив куки файл в заголовок ответа любого аутентифицированного запроса (то есть логин). Браузер будет придерживаться этого и отправить его в заголовки последующих запросов. Не нужно управлять этим вручную в своем приложении.

Вам нужно будет разработать модели Knockout.js для обработки ответов об отказе от API, если они не авторизованы, но вы все равно будете делать это без проверки подлинности.

(Если вам нужно знать в своем приложении, будет ли пользователь зарегистрирован без выполнения запроса API, вы можете проверить cookie (вручную в JS или с помощью библиотеки, например jquery-cookie)

Ответ 3

Сохранение файла cookie - отличная идея. Сделать его простым является ключ.