OAuth不返回电子邮件护照身份验证

OAuth不返回电子邮件护照身份验证

本文介绍了Google OAuth不返回电子邮件护照身份验证的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试使用js节点的护照模块使用Google按钮登录.我正在尝试获取人的电子邮件ID,名称,个人资料图片.我正在尝试将图片下载到本地服务器.即使在范围内添加了电子邮件",Google也不会返回电子邮件ID,并且返回的个人资料图片链接也无法正常工作.我研究了这个问题的各种答案,但所有人都说包括userinfo.email.现在已不推荐使用.根据google文档,新的作用域参数是电子邮件.

I am trying to make a sign in with google button using passport module of node js. I am trying to get person's email id, name, profile pic. I am trying to download pic to local server. Google is not returning email id even after adding 'email' to scope and nor the returned link for profile pic is working. I have looked into various answers to this question but all say to include userinfo.email. It has been deprecated now. As per google documentation new scope parameter is email.

下面是我的代码.感谢您的帮助.

Below is my code. Any help is appreciated.

护照

passport.use(new GoogleStrategy({

    clientID        : configAuth.googleAuth.clientID,
    clientSecret    : configAuth.googleAuth.clientSecret,
    callbackURL     : configAuth.googleAuth.callbackURL,
},
function(token, refreshToken, profile, done) {

    // make the code asynchronous
    // User.findOne won't fire until we have all our data back from Google
    process.nextTick(function() {

        // try to find the user based on their google id
        User.findOne({ 'google.id' : profile.id }, function(err, user) {
            if (err)
                return done(err);

            if (user) {

                // if a user is found, log them in
                return done(null, user);
            } else {
                // if the user isnt in our database, create a new user
                var newUser          = new User();
                console.log(profile);
                //JSON.parse(profile);
                // set all of the relevant information
                newUser.google.id    = profile.id;
                newUser.google.token = profile.token;
                newUser.google.name  = profile.displayName;
                newUser.google.uname = profile.emails[0].value; // pull the first email
                newUser.google.dp    = profile._json.picture;
                console.log('url is');
                console.log(newUser.google.name);
                console.log(newUser.google.dp);
                //console.log(profile.picture);
                Download(newUser.google.uname, newUser.google.dp,function(err){
                    if(err)
                        console.log('error in dp');
                    else
                        console.log('Profile Picture downloaded');
                });

                // save the user
                newUser.save(function(err) {
                    if (err)
                        throw err;
                    return done(null, newUser);
                });
            }
        });
    });

}));
};

routes.js

routes.js

    app.get('/connect/google', passport.authorize('google', { scope : ['profile', 'email'] }));

    // the callback after google has authorized the user
    app.get('/connect/google/callback',
        passport.authorize('google', {
            successRedirect : '/profile',
            failureRedirect : '/'
        }));

download.js

download.js

    module.exports = function(username, uri, callback){
var destination;

request(uri).pipe(fs.createWriteStream("./downloads/"+username+".png"))
.on('close', function(){
    console.log("saving process is done!");
});

推荐答案

我遇到了同样的问题,并以此方式编写了作用域:

I had the same problem and wrote the scope in this way:

app.get('/connect/google', passport.authenticate('google', {
    scope: [
        'https://www.googleapis.com/auth/userinfo.profile',
        'https://www.googleapis.com/auth/userinfo.email'
    ]
}));

您将收到电子邮件:

function(accessToken, refreshToken, profile, done) {
    console.log(profile.emails[0].value);
});

希望这对您有所帮助.

这篇关于Google OAuth不返回电子邮件护照身份验证的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-12 22:13