Прежде всего, это НЕ дубликат, поскольку вся документация / ответы для версий до v1.0 существуют и, похоже, не работают.
I 'я пытаюсь реализовать простую аутентификацию с passport
и SailsJS v1.0.
Проблема в том, что ... поскольку я новичок в этом, и в sailsjs (v1), похоже, отсутствуют примеры в Интернете, ядовольно застрял.
Приложение должно работать следующим образом -> Пользователь регистрируется, проверяет свою электронную почту и затем входит в систему. После входа в систему пользователь получает accessToken
, который он должен использовать для отправки запросов к защищенным маршрутам.(через Bearer
или что-то еще).
Токены должны быть сохранены в БД, чтобы я мог сделать их недействительными, когда пользователь меняет пароль и тому подобное.
Как мне достичь чего-то подобного?Это то, что я получил до сих пор (объединение старых / новых примеров в сети).
User.js (модель)
const bcrypt = require('bcryptjs');
module.exports = {
attributes: {
email: {
type: 'string',
required: true,
unique: true
},
username: {
type: 'string',
required: true,
unique: true
},
password: {
type: 'string',
required: true
},
tokens: {
collection: 'token',
via: 'userId'
}
},
customToJSON: function () {
return _.omit(this, ['password'])
},
beforeCreate: function (user, cb) {
bcrypt.genSalt(10, function (err, salt) {
bcrypt.hash(user.password, salt, null, function (err, hash) {
if (err) return cb(err);
user.password = hash;
return cb();
});
});
}
};
Token.js (модель)
module.exports = {
attributes: {
token: {
type: 'string',
required: true,
unique: true
},
userId: {
mode: 'user'
},
isValid: {
type: 'bool',
}
},
};
Так как я очень новичок в узле и особенно паруса, у меня немало вопросов.
- Как я могу создать токен при входе пользователя в систему, если токен в БД недействителен(или я должен просто использовать 1 токен при регистрации / сменить пароль?)
- Как реализовать процесс аутентификации с использованием
passport
? - Должен ли токен иметь определенный формат (количество символов и т. Д.) По соображениям безопасности?
- Есть ли лучший подход к тому, чего я пытаюсь достичь?(точнее, я хочу, чтобы сервер REST Api служил моему интерфейсу ReactJS с возможностью повторного использования этого же интерфейса для Android / IOS и т. д.).
Любые советы, ссылки, предложения и т. д. будут высоко оценены.Спасибо и смилуйся над моим отсутствием знаний!
РЕДАКТИРОВАТЬ: Неужели этот подход помешает мне использовать вход в социальные сети (я хочу реализовать это и в будущем)?