2016-08-27 46 views
0

我使用HTTP Bearer StrategyPassport.js HTTP-承載戰略,得到REQ通過運作

這裏是我的承載戰略代碼:

var passport = require('passport'), 
    url = require('url'), 
    BearerStrategy = require('passport-http-bearer').Strategy, 
    config = require('../config'), 
    mongoose = require('mongoose'), 
    User = mongoose.model('User'), 
    users = require('../../app/controllers/users.server.controller'); 

module.exports = function() { 
    // Use bearer strategy 
    passport.use(new BearerStrategy(
     function(token, done) { 

      User.findOne({ token: token }, function (err, user) { 
       if (err) { return done(err); } 
       if (!user) { return done(null, false); } 
       return done(null, user, { scope: 'all' }); 
      }); 
     } 
    )); 
}; 

相反的處理在我的路線路由功能文件(如在他們的例子),我用我的user.server.controller.js與出口的功能,像這樣:

// route 
app.route('/auth/bearersignin').post(users.bearerSignin); 

// export function in user controller 
exports.bearerSignin = function(req, res) { 
    console.log('bearerSignin', req.user); // CAN DETECT req.user HERE FINE 
    passport.authenticate('bearer', {session:false}, function(req, res) { 
     console.log('inside authenticate', req.user); // BUT HERE IT'S SHOWING UP null 
     var response = { 
      userObj: req.user, 
      redirectUrl: req.session.redirectUrl 
     }; 
     res.json(response); 
    })(req, res); 
}; 

如何正確構建我exports.bearerSignin本功能用來處理請求並通過Passport進行身份驗證?

BTW,這裏是傳遞給出口功能爲用戶對象的JSON:

{ 
    _id: abc123idnumber, 
    photo: 'https://pbs.twimg.com/profile_images/abc123/IMG_2899-square_normal.jpg', 
    provider: 'local', 
    username: 'userabc123', 
    __v: 0, 
    created: Tue Aug 23 2016 00:52:20 GMT+0000 (UTC), 
    updated: Fri Aug 26 2016 03:53:17 GMT+0000 (UTC), 
    freeEventsCount: 1, 
    eventsSubscription: false, 
    profiles: [], 
    roles: [ 'user' ], 
    google: {}, 
    facebook: {}, 
    twitter: 
    { profilePhoto: 'https://pbs.twimg.com/profile_images/idabc123/square_normal.jpg', 
     name: 'Joe Smith', 
     token: 'tokenabc123', 
     username: 'tonejac', 
     id: 'abc123' }, 
    localAccountExists: true, 
    firstName: 'joe', 
    email: '[email protected]' 
} 

回答

2

你的回調是在錯誤的地方(這是在passport.authenticate而不是返回的中間件)。

exports.bearerSignin = function(req, res) { 
    passport.authenticate('bearer', { 
     session: false 
    })(req, res, function() { // this is the function called after auth 
     console.log('inside authenticate', req.user); 
     var response = { 
      userObj: req.user, 
      redirectUrl: req.session.redirectUrl 
     }; 
     res.json(response); 
    }); 
}; 
+0

哦......有趣。我會試一試,讓你知道它是怎麼回事。 (回答待定) – tonejac