經過幾個小時試圖自己解決這個問題後,我到達SO社區尋找一些光。Passport身份驗證回調掛起
我正在使用護照進行用戶驗證。它已經初始化,在我的主要express.js文件按照文檔:
app.use(passport.initialize());
我得到它以這種方式處理一個facebook-passport
文件index.js: Index.js
'use strict';
import express from 'express';
import passport from 'passport';
import auth from '../auth.service';
let router = express.Router();
//this function is defined in the auth.service import but copied it here in case it's needed (the `signToken` is also defined in the service)
function setTokenCookie(req, res) {
if (!req.user) return res.json(404, { message: 'Something went wrong, please try again.'});
var token = signToken(req.user._id, req.user.role);
res.cookie('token', JSON.stringify(token));
res.redirect('/');
}
router
.get('/', passport.authenticate('facebook', {
scope: ['email', 'user_about_me'],
failureRedirect: '/login'
}))
.get('/callback', passport.authenticate('facebook', {
successRedirect: '/',
failureRedirect: '/login'
}), setTokenCookie);
module.exports = router;
而且護照多數民衆贊成被導入在index.js這樣的.js:
passport.js
import passport from 'passport';
import {
Strategy as FacebookStrategy
}
from 'passport-facebook';
exports.setup = function(User, config) {
passport.use(new FacebookStrategy({
clientID: config.facebook.clientID,
clientSecret: config.facebook.clientSecret,
callbackURL: config.facebook.callbackURL
},
function(accessToken, refreshToken, profile, done) {
User.findOne({
'facebook.id': profile.id
}, (findErr, user) => {
if (findErr) {
return done(findErr);
}
if (!user) {
let userToSave = new User({
name: profile.displayName,
email: profile.emails[0].value,
role: 'user',
username: profile.username,
provider: 'facebook',
facebook: profile._json
});
userToSave.save((saveErr) => {
if (saveErr) done(saveErr);
return done(null, user);
});
} else {
return done(null, user);
}
});
}
));
};
這是目前發生的情況:
- Facebook登錄提示
- 在Facebook的成功認證回調(/ auth /中的Facebook /回調)與用戶信息達到和令牌預期後。
- 節省了用戶之後,
done(null,user)
什麼都不做: - 用戶與所需字段
事情變得怪異保存在數據庫中。該應用掛在回調上,客戶端一直在等待響應。
- 節省了用戶之後,
- 中間件setTokenCookie永遠不會被調用,所以問題肯定在上一步。
我已經試過什麼:
- 結束語從
passport.js
整個設置功能在process.tick(發現有些人使用它,但並沒有解決問題) - 使用與貓鼬承諾在
User.findOne({...}).exec().then(user => {...})
如果您需要更多的信息,請不要猶豫,問。任何幫助真的很感激。
謝謝!
您打電話給了mongoose.connect()嗎? –
是的:)。關於Mongoose的一切,按預期工作,用戶可以是從數據庫保存或從數據庫中獲取的,但是在完成這兩種情況下(空,用戶)被掛起。 – Daniel
你怎麼確定setTokenCookie沒有執行?你到處都只有console.logs嗎? –