Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/39.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
Node.js 快速通行证谷歌&x2B;自定义身份验证_Node.js_Oauth 2.0_Passport.js - Fatal编程技术网

Node.js 快速通行证谷歌&x2B;自定义身份验证

Node.js 快速通行证谷歌&x2B;自定义身份验证,node.js,oauth-2.0,passport.js,Node.js,Oauth 2.0,Passport.js,我有一个express应用程序,使用passportjs管理身份验证 目前,我只想在我的应用程序中支持使用谷歌登录。我已经正确地执行了这一点,并且工作得很好。现在,我想将对应用程序的访问限制为仅向该应用程序注册的用户 注册是由管理员完成的,因此只能有少数用户注册。目前,任何拥有谷歌账户的人都可以登录到该应用程序。与此相反,我希望使用OAuth2.0与google进行身份验证,并且在允许用户登录到系统之前,我希望检查我的数据库中是否存在该用户 更新 以下是我的代码 var passport = r

我有一个express应用程序,使用passportjs管理身份验证

目前,我只想在我的应用程序中支持使用谷歌登录。我已经正确地执行了这一点,并且工作得很好。现在,我想将对应用程序的访问限制为仅向该应用程序注册的用户

注册是由管理员完成的,因此只能有少数用户注册。目前,任何拥有谷歌账户的人都可以登录到该应用程序。与此相反,我希望使用OAuth2.0与google进行身份验证,并且在允许用户登录到系统之前,我希望检查我的数据库中是否存在该用户

更新

以下是我的代码

var passport = require('passport');
var GoogleStrategy = require('passport-google-oauth').OAuth2Strategy;
var config = require('./config');
var directoryService = require('./services/directory');

/**
 * Authentication configuration
 */
module.exports = function (app, router) {

    passport.serializeUser(function (user, done) {
        //I want to know if this is the correct process
        directoryService.findResidentByEmailAddress(user.emails[0].value).then(function (data) {
            if (data == null || data.length == 0) {
                done({ 'status': 'Invalid Login' });
            } else {
                done(null, data);
            }

        });

    });
    passport.deserializeUser(function (obj, done) {
        done(null, obj);
    });

    passport.use(new GoogleStrategy({
        clientID: config.auth.clientID,
        clientSecret: config.auth.clientSecret,
        callbackURL: config.auth.callbackURL,
        passReqToCallback: true
    },
        function (request, accessToken, refreshToken, profile, done) {
            process.nextTick(function () {
                return done(null, profile);
            });
        }
    ));

    app.use(passport.initialize());
    app.use(passport.session());

    router.use(function (req, res, next) {
        if (req.isAuthenticated() || req.url.startsWith('/auth/')) {
            return next();
        }
        res.redirect('/auth/login.html');
    });

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


    router.get('/auth/google/callback',
        passport.authenticate('google', { failureRedirect: '/login' }),
        function (req, res) {
            res.redirect('/');
        });

    router.get('/logout', function (req, res) {
        req.logout();
        res.redirect('/auth/login.html');
    });
}

发布您的代码以便我们能够提供帮助。发布一些东西以便我们能够更好地帮助您,我们不会为您编写完整的代码。我不是在寻找代码。。我在寻找如何做这件事的想法。。我会在某个时间发布代码。。但它与passportjs文档站点上的内容完全相同。。正如我提到的,我的代码没有任何问题。。我想添加更多功能,并寻求建议。。