Xandr24
@Xandr24
учиться и еще раз учиться

Как настроить стратегию в passport.js (поля данных)?

Привет всем! Вопрос в следующем!
У меня настроена стратегия в пасспорт.js она отвечает за регистрацию, принимает данные полей usernameField: 'email' и passwordField: 'password', и проверяет что если мэйл такой занят то не регает нового юзера, если свободен то регает (банальная проверка на мэйл). При правильном мэйле регается новый юзер и добавляются в таблицу БД данные пароля и мэйла.
Понадобилось мне и другие данные передавать из формы регистрации в БД, и тут пошли проблемы,
Сначала добавил данные AGE в запрос на создание в таблице строки и получаю ответ что age is not defined
const user = await User.create({
                email,
                password,
                age
            });

Окей, не проблема, забыл определить age, определяю в async данную колонку таблицы
passport.use('signup', new LocalStrategy(
    {
        usernameField: 'email',
        passwordField: 'password',
        ageField: 'age'
    },
    async (email, password, age, done) =>.....

При таком раскладе мне пишет лог что done is not function
Окей, поменял местами
async (email, password, done, age) =>.....
Теперь все норм, ни каких ошибок но и данные поля age не добавляются
Как тут быть?? Помогите пожалуйста
PS вот полный код данной стратегии.
passport.use('signup', new LocalStrategy(
    {
        usernameField: 'email',
        passwordField: 'password',
        ageField: 'age'

    },
    async (email, password, done, age) => {
        try {
            const findUser = await User.findOne({
                where: { email }
            });

            if (findUser) {
                done(null, false, {
                    message: 'Email already taken'
                });

                return;
            }

            const user = await User.create({
                email,
                password,
                age
            });

            done(null, user);
        } catch (error) {
            done(error);
        }
    }
));
  • Вопрос задан
  • 240 просмотров
Решения вопроса 1
Zatmil
@Zatmil
Fullstack-разработчик
Вместо ageField нужно указать passReqToCallback: true

Тогда callback будет первым аргументом принимать req.

async(req, email, password, done) ... и из req уже выдернуть все, что нужно.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы