簡體   English   中英

Github oAuth和PassportJS未通過身份驗證

[英]Github oAuth with PassportJS not authenticated

我正在嘗試使用passportJS對github-strategy進行身份驗證。 我以前曾經成功使用過passportJS,但沒有使用github-strategy,盡管我認為它應該沒有太大不同。 / viewData是我測試身份驗證的路由。

該策略成功進行了身份驗證,並將數據放入數據庫中,當我進行序列化和反序列化時,用戶數據實際上就在那里。 當我嘗試在req.isAuthenticated()之后甚至req.session.passport.user存在之后嘗試檢查任何路由時,都會出現問題,並且分別返回false和undefined。 通過/ testAuth重定向身份驗證后,使用true和id#正確地登錄了app.js,這很奇怪。 所以我覺得這與快遞會議或護照整合有關,但現在卻無法解決。 我從事此工作已經很長時間了,希望有人可以幫助我。

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

所以這是一個很奇怪的問題,但是我正在解決其他很奇怪的問題,從而解決了這個問題。 我剛搬走

app.use('/', index);
app.use('/viewData', viewData);

到下面的所有護照代碼都可以使用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM