当前位置: 首页 > 知识库问答 >
问题:

InternalOautHerror:无法在nodejs中获取请求令牌passport-google

宗政浩慨
2023-03-14

错误视图

InternalOautherRror:在Strategy.oauthStrategy._CreateOutherRror(/users/Menaka/WebStormProjects/CardCreaterServer/Node_Modules/Passport-Oauth1/Lib/Strategy。js:396:17)在/users/Menaka/WebStormProjects/CardCreaterServer/Node_Modules/Passport-Oauth1/Lib/Strategy。js:244:41在/users/Menaka/WebStormProjects/CardCreaterServer/Node_Modules/Passport-Oauth1/Lib/Strategy。js:543:17在passBackControl(OAuth.js:397:13)在IncomingMessage。(/users/menaka/webstormprojects/cardcreaterserver/node_modules/oauth/lib/oauth.js:409:9)在emitNone(events.js:72:20)在incomingmessage.emit(events.js:166:7)在endreadableent(_stream_readable.js:921:12)
在nextTickCallbackWith2Args(node.js:442:9)在process._tickcallback(node.js:356:17)

我已经在Google api Manager平台中启用了Google+api

http://localhost:3000

和授权重定向URI

在我的routes.js文件中

var User = require('./models/user');
module.exports = function(app, passport){
    app.get('/', function(req, res){
        res.render('index.ejs');
    });

    app.get('/login', function(req, res){
        res.render('login.ejs', { message: req.flash('loginMessage') });
    });
    app.post('/login', passport.authenticate('local-login', {
        successRedirect: '/profile',
        failureRedirect: '/login',
        failureFlash: true
    }));

    app.get('/signup', function(req, res){
        res.render('signup.ejs', { message: req.flash('signupMessage') });
    });


    app.post('/signup', passport.authenticate('local-signup', {
        successRedirect: '/',
        failureRedirect: '/signup',
        failureFlash: true
    }));

    app.get('/profile', isLoggedIn, function(req, res){
        res.render('profile.ejs', { user: req.user });
    });

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

    app.get('/auth/google/callback',
        passport.authenticate('google', { successRedirect: '/profile',
            failureRedirect: '/' }));


    app.get('/logout', function(req, res){
        req.logout();
        res.redirect('/');
    })
};

function isLoggedIn(req, res, next) {
    if(req.isAuthenticated()){
        return next();
    }

    res.redirect('/login');
}

在我的Passport.js中

var LocalStrategy = require('passport-local').Strategy;

var GoogleStrategy = require('passport-google-oauth').OAuthStrategy;

var User            = require('../app/models/user');

var configAuth=require('./auth');

module.exports = function(passport) {


    passport.serializeUser(function(user, done){
        done(null, user.id);
    });

    passport.deserializeUser(function(id, done){
        User.findById(id, function(err, user){
            done(err, user);
        });
    });


    passport.use('local-signup', new LocalStrategy({
            usernameField: 'email',
            passwordField: 'password',
            passReqToCallback: true
        },
        function(req, email, password, done){
            process.nextTick(function(){
                User.findOne({'local.username': email}, function(err, user){
                    if(err)
                        return done(err);
                    if(user){
                        return done(null, false, req.flash('signupMessage', 'That email already taken'));
                    } else {
                        var newUser = new User();
                        newUser.local.username = email;
                        newUser.local.password = newUser.generateHash(password);

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

            });
        }));

    passport.use('local-login', new LocalStrategy({
            usernameField: 'email',
            passwordField: 'password',
            passReqToCallback: true
        },
        function(req, email, password, done){
            process.nextTick(function(){
                User.findOne({ 'local.username': email}, function(err, user){
                    if(err)
                        return done(err);
                    if(!user)
                        return done(null, false, req.flash('loginMessage', 'No User found'));
                    if(!user.validPassword(password)){
                        return done(null, false, req.flash('loginMessage', 'invalid password'));
                    }
                    return done(null, user);

                });
            });
        }
    ));

    passport.use(new GoogleStrategy({
            consumerKey: configAuth.GoogleAuth.clientID,
            consumerSecret: configAuth.GoogleAuth.clientSecret,
            callbackURL: configAuth.GoogleAuth.callbackURL
        },
        function(accessToken, refreshToken, profile, done) {
            process.nextTick(function(){
                User.findOne({'google.id':profile.id},function(err,user){
                    if(err){
                        return done(err);
                    }
                    if(user){
                        return done(null,user);
                    }else{
                        var newUser=new User();
                        newUser.google.id=profile.id;
                        newUser.google.token=accessToken;
                        newUser.google.name=profile.displayName;
                        newUser.google.email=profile.emails[0].value;

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




};

callbackURL为

要解决此问题,我必须做什么?

共有1个答案

柴俊捷
2023-03-14

我的头撞了一段时间-似乎有一个旧的链接引用在基本策略。我建议你试试

https://github.com/jaredhanson/passport-google-oauth2

取而代之的是。这是最新的和工作立即为我!

 类似资料:
  • 我目前还不熟悉使用php和Laravel以及使用API,但我一直在学习Spotify php教程https://github.com/jwilsson/spotify-web-api-php. 我还大胆地提出了一些我想问的问题,希望有人能帮忙。 我已经完成了所有步骤,但需要帮助才能让它正常工作。 将下面的代码放在它自己的文件中,我们称之为auth。php。将CLIENT_ID和CLIENT_SEC

  • 问题内容: 所以这是我的passport-facebook策略配置: 这是facebookVerificationHandler: 有没有办法访问facebookVerificationHandler中的请求对象? 用户已使用LocalStrategy注册到我的网站,但是他们将能够添加其社交帐户并将这些帐户与本地帐户相关联。调用上面的回调时,req.user中已经有当前登录的用户,因此我需要访问r

  • 我正在学习一个教程,即http://www.androidhive.info/2012/10/android-push-notifications-using-google-cloud-messaging-gcm-php-and-mysql/ 但我无法获取令牌,我的服务类也无法工作。请帮忙

  • 我遵循本教程使用JWT令牌。令牌到期时间设置为仅5分钟,但如果我想在使用1分钟后使令牌无效,该怎么办?我希望能够对API进行调用,以删除我的令牌。 我正在使用Express和Node。 从我能收集到的信息来看,我的选择是拥有一个存储令牌的令牌db。当我想让我的令牌过期时,我会从DB中过期/删除该令牌。 我还看到人们随意地说“移除”物理硬盘空间中的令牌,但我无法找出令牌的物理存储位置,以便我移除它。

  • 我已将OAuth2 Passport安装到我的Laravel项目中。我正在使用postman进行测试,我可以创建新用户,我可以登录(生成令牌)和注销。登录后,我尝试向APIendpoint发出请求,但在这里,我被卡住了,因为无论我在postman

  • 我试图使用从Spring应用程序中的公共客户端获取访问令牌。 谁能帮我弄清楚我做错了什么吗?