API аутентификации узла с помощью passport-jwt

Я пытаюсь настроить аутентификацию JWT, используя passport-jwt. Я думаю, что сделал правильные шаги, но тест GET не удастся, и я не знаю, как его отладить.

Вот что я сделал:

настроитьпаспорт-JWT прямо из документа как можно больше

var jwtOptions = {
    secretOrKey: 'secret',
    issuer: "accounts.examplesoft.com",  // wasn't sure what this was, so i left as defaulted in the doc
    audience: "yoursite.net"   // wasn't sure what this was, so i left as defaulted in the doc
  };

jwtOptions.jwtFromRequest = ExtractJwt.fromAuthHeader();

passport.use(new JwtStrategy(jwtOptions, function(jwt_payload, done) {
  User.findOne({id: jwt_payload.sub}, function(err, user) {
    if (err) {
        return done(err, false);
    }
    if (user) {
        done(null, user);
    } else {
        done(null, false);
        // or you could create a new account
    }
  });
}));

Добавлен результат токена для моей конечной точки пользователя / логина

var jwt = require('jsonwebtoken');
// ...

exports.postLogin = function(req, res, next) {
  passport.authenticate('local', function(err, user, info) {
    if (err) throw err;
    if (!user) {
        return res.send({ msg: 'Login incorrect' });
    }
    req.logIn(user, function(err) {
        if (err) throw err;
        var secretOrKey = jwtOptions.secretOrKey;
        var token = jwt.sign(user, secretOrKey, {
            expiresIn: 631139040 // 20 years in seconds
        });
        res.send({ user: user, jwtToken: "JWT " + token });
    });
  })(req, res, next);
};

Здесь все было хорошо. Я могу войти в систему пользователя (используя паспорт локальной аутентификации), и ответ был, я надеялся ...

{"user": {"_id": "56c8b5bd80d16ef41ec705dd", "email": "[email protected]", "password": "$ 2a $ 10 $ zd ... etc.", "__v": 0,} , "jwtToken": "JWT eyJ0eXAiOiJ .... и т. д." }

Я создал незащищенный тестовый маршрут, как это ...

// in my routes file
app.get('/user/tokenTest', user.tokenTest);

И в моем контроллере простая конечная точка ...

exports.tokenTest = function(req, res) {
    console.log(req.headers);
    res.send("token test!!");
};

И ПОЛУЧЕНИЕ, которое работает хорошо, тоже.

Но затем я пытаюсь защитить этот маршрут так:

app.get('/user/tokenTest', passport.authenticate('jwt', { session: false }),
    user.tokenTest);

После того, как я это сделаю, ничего, кроме грусти. Я отправляю запрос вот так:

curl -k 'https://localhost:3443/user/tokenTest' -H 'Authorization: JWT eyJ0eXAiOiJ... etc.' 

И всегда, всегда получаю 401:

неразрешенный

Журналы консоли в контроллере, похоже, не выполняются, также как и вход вpassport.use метод стратегии. Я настраивал и настраивал, но я немного потерян. Документ passport-jwt просто служит примером, и никакой другой помощи практически нет.

Пожалуйста, есть какие-либо идеи по поводу ошибки, которую я делаю выше, или, по крайней мере, как отладить ??

Ответы на вопрос(2)

Ваш ответ на вопрос