так что мой экзамен скоро, и я наткнулся на запутанный вопрос, касающийся паспорта, я использую express back-end и «базу данных» (просто карта, где ключ - это имя пользователя, а значение - просто javascript объект с остальной информацией), и мне трудно понять, где я должен поставить идентификатор или он должен быть там вообще. Потому что я знаю, что как только пользователь входит в систему (если он называется так: passport.authenticate ('local')), passport будет go через вашу собственную локальную стратегию, которую вы определили, и тогда вы получите объект пользователя для передачи serializeuser, и эта часть немного сбивает с толку, так как большинство обучающих программ здесь просто помещают user.id, и у меня нет идентификатора в моей базе данных, и я возился с почтальоном и точками останова, кажется, что код переходит от localstrategy непосредственно к serializeuser , где этот идентификатор волшебным образом появляется. Я понимаю, что это, вероятно, идентификатор, используемый для сеанса, который предоставил паспорт, но затем вы получаете идентификатор из deserializeuser, который вы должны использовать, чтобы получить пользователя, и вот еще одна путаница, как я могу получить его из базы данных, если Во-первых, у меня не было идентификатора в базе данных.
Вот код, с которым я работаю, чтобы лучше проиллюстрировать (кстати, не мой код). Вот код для локальной стратегии, вам не нужно заботиться о функции verifyUser, userAccount - это файл базы данных, в который я экспортировал эти функции
passport.use(new LocalStrategy(
/*
Need to tell which fields represent the "username" and which the "password".
This fields will be in a Form or JSON data sent by user when authenticating.
*/
{
usernameField: 'username',
passwordField: 'password'
},
function (username, password, done) {
const ok = userAccounts.verifyUser(username, password);
if (!ok) {
return done(null, false, {message: 'Invalid username/password'});
}
const userAccount = userAccounts.getUser(username);
return done(null, userAccount);
}));
passport.serializeUser(function (user, done) {
done(null, user.id);});
passport.deserializeUser(function (id, done) {
const user = userAccounts.getUser(id);
if (user) {
done(null, user);
} else {
done(null, false);
}});
, вот база данных с функцией getUser.
const userAccounts = new Map();
function getUser(id){
return userAccounts.get(id);}
тот же код, который используется в localstrategy и deserializeuser, это неправильно или он должен работать по какой-то причине, если он должен работать, то как?