首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >PassportJS未通过身份验证的Github oAuth

PassportJS未通过身份验证的Github oAuth
EN

Stack Overflow用户
提问于 2018-06-03 00:59:51
回答 1查看 111关注 0票数 0

我正在尝试使用passportJS通过github策略进行身份验证。我之前成功地使用过passportJS,但没有使用github策略,尽管我不认为它应该有太大的不同。/viewData是我用来测试身份验证的路由。

该策略成功地进行了身份验证,并将数据放入DB中,当我序列化和反序列化时,用户数据实际上就在那里。当我尝试在任何路由中检查req.isAuthenticated()或req.session.passport.user是否存在时,问题就来了,它分别返回false和undefined。奇怪的是,在我通过/testAuth重定向身份验证后,在app.js中也进行了同样的检查,身份验证日志正确地带有true和id#。所以我觉得快递会议或护照集成的一些问题打破了它,但我找不到它。我做这个已经很长时间了,所以希望有人能帮助我。

代码语言:javascript
复制
app.use(cookieParser('test'));
app.use(session({
    secret: 'test',
    resave: false,
    saveUninitialized: true
}));
//pasport setup
app.use(passport.initialize());
app.use(passport.session());

// Passport init
passport.use(new GithubStrategy({
    clientID: config.github.clientID,
    clientSecret: config.github.clientSecret,
    callbackURL: config.github.callbackURL },
    function(accessToken, refreshToken, profile, done) {
        User.findOne({ oauthID: profile.id }, function(err, user) {
            if(err) {
                console.log(err);  // handle errors!
            }
            if (!err && user !== null) {
                done(null, user);
            } else {
                user = new User({
                    oauthID: profile.id,
                    name: profile.displayName,
                    created: Date.now()
                });
                user.save(function(err) {
                    if(err) {
                        console.log(err);  // handle errors!
                    } else {
                       console.log("saving user ...");
                       done(null, user);
                    }
                });
            }
        });
    }
));

// test authentication
function ensureAuthenticated(req, res, next) {
    if (req.isAuthenticated()) { return next(); }
    console.log("Not Authenticated", req.user);
    res.redirect('/');
}

app.get('/testAuth', ensureAuthenticated, function(req, res){
    User.findById(req.session.passport.user, function(err, user) {
        if(err) {
            console.log(err);  // handle errors
        } else {
            res.redirect('/viewData');
        }
    });
});

//auth pages
app.get('/auth/github',
    passport.authenticate('github'),
    function(req, res){});
app.get('/auth/github/callback',
    passport.authenticate('github', { failureRedirect: '/' }),
    function(req, res) {
        res.redirect('/testAuth');
    });

// serialize and deserialize for session
passport.serializeUser(function(user, done) {
    console.log('serializeUser: ' + user);
    done(null, user._id);
});
passport.deserializeUser(function(id, done) {
    User.findById(id, function(err, user){
        console.log('deserializeUser: ' + user);
        if(!err) done(null, user);
        else done(err, null);
    });
});
EN

回答 1

Stack Overflow用户

发布于 2018-06-03 01:28:36

这是一个奇怪的问题,但我正在修复其他一些奇怪的东西,并在这样做的过程中解决了这个问题。我刚把我的

代码语言:javascript
复制
app.use('/', index);
app.use('/viewData', viewData);

到下面的所有护照代码,现在它工作了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50659197

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档