#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)