【问题标题】:Passport.js http-bearer Strategy, get req to pass through to functionPassport.js http-bearer 策略,获取req 传递给函数
【发布时间】:2016-08-28 03:14:47
【问题描述】:

我正在使用HTTP Bearer Strategy

这是我的承载策略代码:

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 进行身份验证?

顺便说一句,这是传递给导出函数的用户对象的 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: 'user@example.com'
}

【问题讨论】:

    标签: node.js oauth passport.js


    【解决方案1】:

    你的回调在错误的地方(它在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);
        });
    };
    

    【讨论】:

    • 哦……有趣。我会试一试,让你知道它是怎么回事。 (待答复)
    猜你喜欢
    • 2022-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-05
    • 1970-01-01
    相关资源
    最近更新 更多