Hapi-jwt 问题:Hapi-jwt 身份验证不是 运行 处理函数
Issue with Hapi-jwt: Hapi-jwt authentication not running the handler function
我不确定为什么,但我在 API 上实施 JWT 身份验证时遇到问题。我正在使用 https://www.npmjs.com/package/hapi-jwt 包。
创建令牌没有问题,我在 /api/v1/login (auth) 路由上收到回复,给我一个 status:200 和token:hash。
但是,在任何路由上使用我的基本验证函数会导致路由的处理程序不再 运行,而是验证函数会回复 {"credentials": ... } 对象。
我也在使用 Good 和 good-console,但我认为它们不会造成任何问题。
这是服务器代码(按照它在我的 index.js 文件中出现的顺序):
// SERVER SETUP
var server = new hapi.Server();
server.connection({ port: hapiPortNo });
// JWT SERVER REGISTRATIONS
server.register(require('hapi-jwt'), function(err) {
if(err) throw err;
server.auth.strategy('simple', 'bearer-access-token', {
validateFunc: auth.validateJWT,
secret: jwtCodeString
});
});
function defaultHandler(req, reply) {
reply('success!');
}
server.route({
method: 'GET',
path: '/',
handler: defaultHandler,
config: { auth: 'simple' }
});
server.route({
method: 'POST',
path: '/api/v1/login',
handler: auth.authHandler
});
server.register({
register: good,
options: {
reporters: [{
reporter: require('good-console'),
args: [{ log: '*', response: '*' }]
}]
}
}, function (err) {
if(err) {
throw err;
}
// START SERVER
server.start(function () {
server.log('info', 'Server running at: ' + server.info.uri);
});
});
这些是我的身份验证和验证功能(保存在一个单独的文件中,./lib/auth.js 并作为要求导入):
//Authentication
function authHandler( request, reply ) {
var data = request.payload;
var tokenData = {
"user": data.user
};
var encoded = jwt.sign( tokenData, _codeString);
reply({ "status": 200, "token": encoded });
}
// Validation
function validateJWT( decoded, request, next ) {
var isValid = false;
if(decoded.user == 'me') {
isValid = true;
}
return next(null, isValid, {token: decoded} );
}
hapi 服务器 运行 没有问题,并且在我删除 config: { auth: 'simple' }
时正常回复我所有的路由数据,但由于某种原因添加身份验证导致每条路由回复:
{
"credentials": {
"token": {
"user": "me",
"iat": 1425689201
}
}
}
有什么想法吗?如果有人有推荐,我愿意切换到另一个 JWT 身份验证包。
问题在于 hapi-jwt plugin, it hasn't been updated to work with hapi 8. Line 81 应从
更改
return reply(null, { credentials: credentials });
到
return reply.continue({ credentials: session });
您可以在与 hapi 8 兼容的 hapi-jwt and ask the author to update the module, or you can try to use an other module like hapi-auth-jwt2 的存储库中创建问题。
我不确定为什么,但我在 API 上实施 JWT 身份验证时遇到问题。我正在使用 https://www.npmjs.com/package/hapi-jwt 包。
创建令牌没有问题,我在 /api/v1/login (auth) 路由上收到回复,给我一个 status:200 和token:hash。
但是,在任何路由上使用我的基本验证函数会导致路由的处理程序不再 运行,而是验证函数会回复 {"credentials": ... } 对象。
我也在使用 Good 和 good-console,但我认为它们不会造成任何问题。
这是服务器代码(按照它在我的 index.js 文件中出现的顺序):
// SERVER SETUP
var server = new hapi.Server();
server.connection({ port: hapiPortNo });
// JWT SERVER REGISTRATIONS
server.register(require('hapi-jwt'), function(err) {
if(err) throw err;
server.auth.strategy('simple', 'bearer-access-token', {
validateFunc: auth.validateJWT,
secret: jwtCodeString
});
});
function defaultHandler(req, reply) {
reply('success!');
}
server.route({
method: 'GET',
path: '/',
handler: defaultHandler,
config: { auth: 'simple' }
});
server.route({
method: 'POST',
path: '/api/v1/login',
handler: auth.authHandler
});
server.register({
register: good,
options: {
reporters: [{
reporter: require('good-console'),
args: [{ log: '*', response: '*' }]
}]
}
}, function (err) {
if(err) {
throw err;
}
// START SERVER
server.start(function () {
server.log('info', 'Server running at: ' + server.info.uri);
});
});
这些是我的身份验证和验证功能(保存在一个单独的文件中,./lib/auth.js 并作为要求导入):
//Authentication
function authHandler( request, reply ) {
var data = request.payload;
var tokenData = {
"user": data.user
};
var encoded = jwt.sign( tokenData, _codeString);
reply({ "status": 200, "token": encoded });
}
// Validation
function validateJWT( decoded, request, next ) {
var isValid = false;
if(decoded.user == 'me') {
isValid = true;
}
return next(null, isValid, {token: decoded} );
}
hapi 服务器 运行 没有问题,并且在我删除 config: { auth: 'simple' }
时正常回复我所有的路由数据,但由于某种原因添加身份验证导致每条路由回复:
{
"credentials": {
"token": {
"user": "me",
"iat": 1425689201
}
}
}
有什么想法吗?如果有人有推荐,我愿意切换到另一个 JWT 身份验证包。
问题在于 hapi-jwt plugin, it hasn't been updated to work with hapi 8. Line 81 应从
更改return reply(null, { credentials: credentials });
到
return reply.continue({ credentials: session });
您可以在与 hapi 8 兼容的 hapi-jwt and ask the author to update the module, or you can try to use an other module like hapi-auth-jwt2 的存储库中创建问题。