Как обрабатывать несколько стратегий 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