Как обрабатывать несколько стратегий auth на sails.js SPA?

Как обрабатывать несколько стратегий аутентификации на sails.js SPA?

Я создаю одностраничное приложение, построенное на Angular для front-end и sailsjs для бэкэнд. Прямо сейчас я использую sails-auth (который использует passportjs внутренне), чтобы привязать мою логику аутентификации к моей модели пользователя.

У меня есть несколько поставщиков паспортов, установленных и доступных на моем интерфейсе, таких как passport-github и passport-facebook, но также классический passport-local, чтобы пользователь мог также зарегистрироваться и войти только с его именем пользователя и паролем.

Я хотел бы, чтобы мои клиенты (одностраничное приложение и, возможно, другие в будущем) использовали токен после авторизации вместо файлов cookie/сеансов, чтобы упростить масштабирование и запросы междоменного доступа. Это также упростит мобильную интеграцию.

Я знаю, что мне нужно использовать обратные вызовы для поставщиков OAuth, вот поток, к которому я стремился:

enter image description here

Я знаю, что я могу заменить политику sail-auth sessionAuth политикой tokenAuth, которая может читать маркер из заголовков и запрашивать модель Tokens, например, но тогда мои вопросы:

  • При использовании имени пользователя/пароля для входа запрос может быть выполнен с помощью простого вызова AJAX, поэтому легко передать токен обратно в SPA. При использовании таких провайдеров, как github и т.д., Когда вызывается обратный вызов, следует ли я просто внедрять токен в HTML-код, который я обслуживаю?
  • sail-auth policies/passport.js показывает, что по умолчанию он полагается на встроенные сеансы для продолжения входа/сериализации и десериализации идентификатора пользователя, Как отделить его от встроенных сессий парусов, чтобы он генерировал токен для пользователя и возвращал мой индекс с внедренным токеном?

Заранее благодарю вас!

Ответы

Ответ 1

На маршруте auth вы можете перейти на проверку подлинности на основе pass.js в бэкэнд (без сеанса), используйте токен для tokenAuth и переслать токен пользователю.

Затем для безопасных маршрутов вы можете поместить вызов verifyToken в свою политику (перехватить каждый маршрут).

Отказ от ответственности: я сам не пробовал.

Ответ 2

Я использовал эти шаги некоторое время.

Шаг 1 (Globals): $npm install -g паруса

Шаг 2 (приложение): $sails new myApp

Шаг 3 (Файлы): Скопируйте каждый файл в https://github.com/carlospliego/sails-token-auth-setup в соответствующую папку

Шаг 3A Чтобы еще одна стратегия аутентификации просто добавила еще один файл в каталог приложений/политик/

Вот пример того, что может выглядеть как

 module.exports = function hasValidProductApiToken(req, res, next) {
      if(someCondition){
         next(); // Call next to continue
      }

 };

Шаг 4 (Политики): добавьте этот код в свою конфигурацию /policy.js

 '*': "hasToken",
 UserController: {
    "create": true
 },
 AuthController: {
    '*': true
 }

Шаг 5: измените значение config/tokenSecret.js

Шаг 6: (Зависимости)

  • npm install --save паспорт
  • npm install --save паспорт-локальный
  • npm install --save bcrypt-nodejs
  • npm install --save jsonwebtoken
  • npm install --save express-jwt

Ваши конечные точки будут выглядеть так:

  • POST/GET/PUT/DELETE пользователь /
  • POST auth/login
  • DELETE auth/logout

Вот отличное руководство по созданию аутентификации на основе токенов в парусах: https://github.com/carlospliego/sails-token-auth-setup