2016-08-27 2 views
0

Я использую HTTP Bearer StrategyPassport.js HTTP-носитель стратегии, получить REQ, чтобы пройти через функционировать

Вот мой Bearer Стратегия Код:

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 FUNCT ион для обработки req и аутентификации с помощью Passport?

Кстати, вот 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

Смежные вопросы