我正在使用passport.js本地策略进行身份验证。我还需要用户通过Facebook,Twitter和G +进行身份验证,但不作为auth替代方式,而是使用户能够从这些服务中检索其内容。
如所写,每个身份验证策略都会将用户对象写入请求对象。这具有注销我的root用户的作用。有没有一种方法可以将护照用于这些其他身份验证策略,但不能覆盖用户对象?
这是规范的示例:
var passport = require('passport')
, TwitterStrategy = require('passport-twitter').Strategy;
passport.use(new TwitterStrategy({
consumerKey: TWITTER_CONSUMER_KEY,
consumerSecret: TWITTER_CONSUMER_SECRET,
callbackURL: "http://www.example.com/auth/twitter/callback"
},
function(token, tokenSecret, profile, done) {
User.findOrCreate(..., function(err, user) {
if (err) { return done(err); }
done(null, user); //trashes my existing user object
});
}
));
一种方法是使用回调而不是重定向。通常,您将调用req.login()来设置请求对象。您可以跳过该步骤,然后对响应进行任何操作。
app.get('/auth/twitter/callback', function (req, res, next) {
passport.authenticate('twitter', function (err, user, info) {
res.send({err: err, user: user, info: info}); //skip req.login()
})(req, res, next)
});
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句