Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用PassportJS google OAUTH2.0的身份验证问题_Javascript_Node.js_Google Oauth_Passport.js - Fatal编程技术网

Javascript 使用PassportJS google OAUTH2.0的身份验证问题

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

我正在尝试实现passport oAuth登录和注册API,该API将在注册和登录现有用户时将用户保存到MongoDB。。我使用我的google mail帐户(其中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}`,
        });
    }
}
控制器代码

    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)