Express Passportjs Google +自定义身份验证

时间:2017-01-21 14:30:41

标签: node.js oauth-2.0 passport.js

我有一个明确的应用程序,我使用passportjs来管理身份验证。

目前我只想在我的应用程序中支持使用google登录。我已经正确实现了这一点并且工作正常。现在,我想将对应用程序的访问权限仅限于那些在应用程序中注册的用户。

注册由管理员完成,因此只能注册的用户很少。目前,拥有Google帐户的任何人都可以登录该应用程序。而不是这个,我希望使用OAuth2.0进行身份验证,我想在用户登录系统之前检查用户是否存在于我的数据库中。

更新

以下是我要求的代码

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');
    });
}

0 个答案:

没有答案