Javascript 使用PassportJS google OAUTH2.0的身份验证问题
我正在尝试实现passport oAuth登录和注册API,该API将在注册和登录现有用户时将用户保存到MongoDB。。我使用我的google mail帐户(其中3个)进行测试,但出于某种原因,它只注册并登录我的一封邮件,然后在尝试注册其他帐户时发送错误。以下是护照代码和管制员代码Javascript 使用PassportJS google OAUTH2.0的身份验证问题,javascript,node.js,google-oauth,passport.js,Javascript,Node.js,Google Oauth,Passport.js,我正在尝试实现passport oAuth登录和注册API,该API将在注册和登录现有用户时将用户保存到MongoDB。。我使用我的google mail帐户(其中3个)进行测试,但出于某种原因,它只注册并登录我的一封邮件,然后在尝试注册其他帐户时发送错误。以下是护照代码和管制员代码 async function ssoLogin(req, res, next){ // declare token; let token; // declare rider wi
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}`,
});
}
}
控制器代码
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配置代码:
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:\Users\peter\Desktop\driveme-backend-master\node_modules\mongoose-mongodb-errors\lib\plugin.js:19:49)
at callMiddlewareFunction (C:\Users\peter\Desktop\driveme-backend-master\node_modules\kareem\index.js:482:23)
at next (C:\Users\peter\Desktop\driveme-backend-master\node_modules\kareem\index.js:163:9)
at Kareem.execPost (C:\Users\peter\Desktop\driveme-backend-master\node_modules\kareem\index.js:217:3)
at _handleWrapError (C:\Users\peter\Desktop\driveme-backend-master\node_modules\kareem\index.js:245:21)
at _cb (C:\Users\peter\Desktop\driveme-backend-master\node_modules\kareem\index.js:304:16)
at C:\Users\peter\Desktop\driveme-backend-master\node_modules\mongoose\lib\model.js:341:9
at C:\Users\peter\Desktop\driveme-backend-master\node_modules\kareem\index.js:135:16
at processTicksAndRejections (internal/process/task_queues.js:79:11)