Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 未知身份验证策略:hapi身份验证_Javascript_Node.js_Hapijs - Fatal编程技术网

Javascript 未知身份验证策略:hapi身份验证

Javascript 未知身份验证策略:hapi身份验证,javascript,node.js,hapijs,Javascript,Node.js,Hapijs,我正在尝试使用hapi身份验证承载简单模块在我的应用程序上启用承载令牌。然而,我得到了标题中显示的错误 我正在尝试实现此模块,以便在我的应用程序中启用令牌授权,但我遇到了下面提到的错误 e:\python\u training\training\Node\Test\Project\Backend\Node\u modules\hapi\Node\u modules\hoek\lib\index.js:723 我有一个路由文件 module.exports = [ { me

我正在尝试使用hapi身份验证承载简单模块在我的应用程序上启用承载令牌。然而,我得到了标题中显示的错误

我正在尝试实现此模块,以便在我的应用程序中启用令牌授权,但我遇到了下面提到的错误

e:\python\u training\training\Node\Test\Project\Backend\Node\u modules\hapi\Node\u modules\hoek\lib\index.js:723

我有一个路由文件

module.exports = [
    {
        method: 'GET',
        path: '/api/{_id?}',
        handler: function (request, reply) {
           Controller.control.get(request.params, function (err, success) {
                console.log(request.params);
                if (err) {  
                    reply(unifunc.sendError(err));
                } else {
                    reply(unifunc.sendSuccess(SuccessMsg,success)).code(200);
                }
            });
        },
        config: {
            description: 'desc',
            tags: ['api', 'oV'],
            validate: {
                headers: unifunc.authorizationHeaderObj,
                params: {
                    o_id: Joi.string().required().trim(),
                    _id: Joi.string().optional().trim()
                },
                failAction: unifunc.failActionFunction
            },
            auth: {
                strategy: 'bearer',
                scope: ['admin', 'user-{params.id}']
                },
            plugins: {
                'hapi-swagger': {
                    responseMessages: msgs
                }](url)
还有一个控制器文件,我在其中提到了策略

var bearerSimple= require('hapi-auth-bearer-simple')
authorization = Authorization.auth; // This plugin has the logic to validate the token and return the error in case it fails and I am passing accesstoken as parameter in a function in that file
var getV = function(server, params, callbackRoute){  
    server.register(
        [{
            register: bearerSimple
        }], function(err){
     if(err){
         console.log("Failed to log the plugin",err);
         throw err;
     }
     server.auth.strategy('bearer', 'bearerAuth', {
        authorization : authorization
     });
    });
    console.log(params);
    async.series([
        function(cb){}
        ]}
完整的错误消息是:

Error: Unknown authentication strategy: bearer in path: /api/orders/{order_id}/vehicles/{_id?}
    at Object.exports.assert (e:\python_training\Training\Node\Test\Project\Backend\node_modules\hapi\node_modules\hoek\lib\index.js:723:11)
    at e:\python_training\Training\Node\Test\Project\Backend\node_modules\hapi\lib\auth.js:152:14
    at Array.forEach (native)
    at internals.Auth._setupRoute (e:\python_training\Training\Node\Test\Project\Backend\node_modules\hapi\lib\auth.js:149:24)
    at new module.exports.internals.Route (e:\python_training\Training\Node\Test\Project\Backend\node_modules\hapi\lib\route.js:142:47)
    at internals.Connection._addRoute (e:\python_training\Training\Node\Test\Project\Backend\node_modules\hapi\lib\connection.js:375:17)
    at internals.Connection._route (e:\python_training\Training\Node\Test\Project\Backend\node_modules\hapi\lib\connection.js:367:18)
    at wrappedRoute [as _route] (e:\python_training\Training\Node\Test\Project\Backend\node_modules\newrelic\lib\instrumentation\hapi.js:222:29)
    at internals.Plugin._apply (e:\python_training\Training\Node\Test\Project\Backend\node_modules\hapi\lib\plugin.js:460:14)
    at internals.Plugin.route 
我有办法解决这个问题吗

编辑: 我修改了server.js文件并从控制器文件中删除了策略

我将策略放在server.js中

var validationFunction = Authorization.auth;
console.log(validationFunction);

server.register(
    [{
        register: bearerSimple
    }], function(err){
 if(err){
     console.log("Failed to log the plugin",err);
     throw err;
 }

 server.auth.strategy('bearer', 'bearerAuth', {
    validationFunction : validationFunction
 });
});
在授权文件中,如下所示

function rauth(accessToken, cb) {
    var criteria = {accessToken: accessToken};
    var projection = {};
    var options = {limit: 1};
    Service.AdminService.getadmin(criteria, projection, options, function (err, data) {
        if (err) {
            cb(err);
        } else if (data && data.length > 0 && data[0]._id) {
            console.log(data);
            console.log(data.length);
            adminId = data[0]._id;
            cb()
        } else {
            cb(UniversalFunctions.CONFIG.APP_CONSTANTS.STATUS_MSG.ERROR.INVALID_ACCESS_TOKEN);
        }
    });
现在我得到了这个错误:

Error: options.validateFunc must be a valid function in bearerAuthentication scheme
几天来我一直在为这个问题伤脑筋。有人能告诉我这里有什么问题吗

我发现的唯一问题是validateFunction中传递的回调函数的参数,但我无法删除这些参数,因为这些参数是在另一个名为getadmin的函数中定义的。有人能提出解决方法吗?

已解决此问题。
问题是输入错误,需要在成功授权时传递更多信息。

您的身份验证函数rauthaccessToken、cb中有输入错误,或者这只是粘贴错误?这是输入错误!我发现问题在于策略中提到的功能。我提到了validationFunction:validationFunction,但它应该是validateFunction:validationFunction。虽然现在当我运行get方法时,它甚至不读取为它创建的函数。