如何使用护照访问快速控制器中的当前用户?

How do I access the current user in an express controller using passport?

我正在使用 express 和 passport 来登录用户,在我的一个控制器中,我想访问当前登录的用户,但我对如何访问他们感到困惑。 req.user好像不存在

您必须在每次用户每次请求时进行身份验证,并设置 req.user 策略。我用代币策略。

令牌已在 headers 中发送。 代替令牌的可能是 cookie 或其他策略。

下面是不完整的代码,但你能帮忙吗:

var bodyParser = require('body-parser');
var express = require('express');
var jwt = require('jsonwebtoken');

var LocalStrategy = require('passport-local').Strategy;
var BearerStrategy = require('passport-http-bearer').Strategy;

var app = express();

app.use(bodyParser.json());


//Local Strategy to login user with email and password

passport.use(new LocalStrategy({
        usernameField: 'email',
        passwordField: 'password'
    },
    function(email, password, done) {
        usersRepository
            .getUserByEmail(email)
            .then(function(user) {
                if (!!user && passwordHelper.verify(password, user.password, user.salt)) {
                    done(null, user);
                } else {
                    done(null, false);
                }
            });
    }));


//Bearer Strategy to auth user with token - run with every request

passport.use(new BearerStrategy(function(token, done) {
    jwt.verify(token, 'secret', function(err, decoded) {
        if (!err && decoded) {
            done(null, decoded); // !!! here is set req.user - decode is my user from token
        } else {
            done(null, false);
        }
    });
}));

app.use(passport.initialize());

var bearerAuth = passport.authenticate('bearer', {
    session: false
});

bearerAuth.unless = require('express-unless');

//Adding Bearer Strategy to all routing unless login

app.use(bearerAuth.unless({
    path: [
        '/login'
    ]
}));

passport.serializeUser(function(user, done) {
    done(null, user);
});

passport.deserializeUser(function(user, done) {
    done(null, user);
});

//Login - use Local Strategy

app.post('/login', passport.authenticate('local'), function(req, res) {
    var accessToken = jwt.sign(req.user, 'secret', {
        expiresIn: '7d'
    });

    res.send({
        id: req.user.id,
        accessToken: accessToken,
        email: req.user.email,
        isAdmin: req.user.is_admin
    });
});