Проблема с аутентификацией с использованием PassportJS google OAUTH2.0

#javascript #node.js #google-oauth #passport.js

#javascript #node.js #google-oauth #passport.js

Вопрос:

Я пытаюсь реализовать API входа и регистрации passport OAuth, который сохранит пользователя в MongoDB при регистрации и входе в систему для существующего пользователя.. Я использовал свои почтовые учетные записи Google (3 из них) для тестирования, но по какой-то причине он регистрируется и входит только в одну мою почту, а затем отправляет сообщение об ошибке при попытке зарегистрировать другие учетные записи. ниже приведен код паспорта и код контроллера

код контроллера

     async function ssoLogin(req, res, next){

    // declare token;
    let token;

    // declare rider with sso login
    let riderSSO;

    try{
        const { _raw, _json, ...userProfile } = req.user;
        console.log(userProfile)

        //validate sso details that will be added into model
        const { error } = ssovalidateRider({
            email: userProfile.emails[0].value.toLowerCase().trim(),
            firstName: userProfile.name.familyName,
            lastName: userProfile.name.givenName,
            googleId: userProfile.id
        });
        if (error)
            return res.status(400).json({
                error: error.details[0].message,
            });

       
        // check if a user is already existing...
        riderSSO= await RiderModel.findOne({googleId: userProfile.id});

        if(riderSSO){
            // create a Token
            token= riderSSO.generateAuthToken(riderSSO._id, riderSSO.email)
            delete riderSSO['__v'];
        }else{
            // Register new user here
            riderSSO = await RiderModel.create({
                // email: _json.email.toLowerCase().trim(),
                email: userProfile.emails[0].value.toLowerCase().trim(),
                googleId: userProfile.id,
                firstName: userProfile.name.familyName,
                lastName: userProfile.name.givenName
            });

            // create a Token
            token= riderSSO.generateAuthToken(riderSSO._id, riderSSO.email)
            delete riderSSO['__v'];
        }
        

        res.status(201).json({
            status: 'success',
            data: req.user,
            token,
            data: riderSSO
        });

    }catch(err){
        console.log(err)
        res.status(400).json({
            sucess:'fail',
            message: `unable to login or signup ${err}`,
        });
    }
}
  

код конфигурации паспорта:

 passport.use(new GoogleStrategy({
clientID: process.env.CLIENT_1_ID,
clientSecret: process.env.CLIENT_1_SECRET,
callbackURL: "http://localhost:4000/api/v1/rider/google/callback",
proxy: true
}, (accessToken, refreshToken, profile, done) => {
console.log(accessToken);
return done(null, profile)
}));
  

ошибка:

 TypeError: Cannot read property '1' of null
at model.mongodbErrorHandler (C:UserspeterDesktopdriveme-backend-masternode_modulesmongoose-mongodb-errorslibplugin.js:19:49)
at callMiddlewareFunction (C:UserspeterDesktopdriveme-backend-masternode_moduleskareemindex.js:482:23)
at next (C:UserspeterDesktopdriveme-backend-masternode_moduleskareemindex.js:163:9)
at Kareem.execPost (C:UserspeterDesktopdriveme-backend-masternode_moduleskareemindex.js:217:3)
at _handleWrapError (C:UserspeterDesktopdriveme-backend-masternode_moduleskareemindex.js:245:21)
at _cb (C:UserspeterDesktopdriveme-backend-masternode_moduleskareemindex.js:304:16)
at C:UserspeterDesktopdriveme-backend-masternode_modulesmongooselibmodel.js:341:9
at C:UserspeterDesktopdriveme-backend-masternode_moduleskareemindex.js:135:16
at processTicksAndRejections (internal/process/task_queues.js:79:11)