2016-02-08 45 views
0

我正在爲我的node.js應用程序使用護照。 當我想本地用戶進行身份驗證,我可以簡單地做Node.js護照自定義回調

function local(req, res) { 
    req._passport.instance.authenticate('local', function(err, user, info) { 
     if(err) { 
      return workflow.emit('exception', err); 
     } 
     // and so on 
     res.end('some data'); 
    } 
} 

但是,當我想用​​Facebook的策略,我必須這樣使用redirectUrls。

function signinFacebook(req, res, next) { 
    req._passport.instance.authenticate('facebook')(req, res, next); 
} 

function facebookCallback(req, res, next) { 
    req._passport.instance.authenticate('facebook', { 
     successRedirect: '/', 
     failureRedirect: '/' 
    })(req, res, next); 
} 

這種方式我不能發送響應數據,我發送本地策略。

任何人都可以幫助我解決它。我不想讓成功和失敗重定向,我想調用一些功能,如果一切順利就像本地策略一樣。

回答

2

我在Passport's documentation找到了,可能有幫助。

app.get('/login', function(req, res, next) { 
    passport.authenticate('local', function(err, user, info) { 
    if (err) { return next(err); } 
    if (!user) { return res.redirect('/login'); } 
    req.logIn(user, function(err) { 
     if (err) { return next(err); } 
     return res.redirect('/users/' + user.username); 
    }); 
    })(req, res, next); 
}); 

請注意,使用定製的回調時,就變成了應用程序的責任,建立一個會話(通過調用req.login()),併發送響應。