【问题标题】:Issue with Hapi-jwt: Hapi-jwt authentication not running the handler functionHapi-jwt 的问题:Hapi-jwt 身份验证未运行处理程序函数
【发布时间】:2015-03-09 18:47:36
【问题描述】:

我不知道为什么,但在我的 API 上实现 JWT 身份验证时遇到问题。我正在使用https://www.npmjs.com/package/hapi-jwt 包。

创建令牌没有问题,我在 /api/v1/login (auth) 路由上收到回复,给我一个状态:200 和令牌:哈希。

但是,在任何路由上使用我的基本验证函数会导致路由的处理程序不再运行,而是验证函数以 {"credentials": ... } 对象进行回复。

我也在使用 Goodgood-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} );
}

当我删除 config: { auth: 'simple' } 时,hapi 服务器正常运行并正常回复我所有路由的数据,但由于某种原因添加身份验证导致每条路由回复:

{
    "credentials": {
        "token": {
            "user": "me",
            "iat": 1425689201
        }
    }
}

有什么想法吗?如果有人有推荐,我愿意切换到另一个 JWT 身份验证包。

【问题讨论】:

    标签: node.js jwt hapijs


    【解决方案1】:

    问题在于 hapi-jwt 插件,它尚未更新为可与 hapi 8 一起使用。Line 81 应该从

    return reply(null, { credentials: credentials });
    

    return reply.continue({ credentials: session });
    

    您可以在hapi-jwt 的仓库中创建问题并要求作者更新模块,或者您可以尝试使用与hapi 8 兼容的其他模块,例如hapi-auth-jwt2

    【讨论】:

    • 确实是这样,我切换到 hapi-auth-jwt2,这一切都像一个魅力。谢谢格戈!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-24
    • 2018-10-21
    • 1970-01-01
    相关资源
    最近更新 更多