2017-10-04 79 views
0

我正嘗試使用hapi-auth-bearer-simple模塊在我的應用上啓用不記名令牌。但是,我收到標題中顯示的錯誤。未知的身份驗證策略:hapi-auth-bearer-simple

我想實現這個模塊,使令牌授權在我的應用程序,但我收到下面

e:\python_training\Training\Node\Test\Project\Backend\node_modules\hapi\node_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的函數中定義。任何人都可以爲此提出解決方法嗎?

+0

在auth函數'function rauth(accessToken,cb)'中存在一個錯誤,或者這只是一個粘貼錯誤? – Ankh

+0

這是一個錯字錯誤!我發現它與策略中提到的功能相關的問題。我提到了validationFunction:validationFunction,但它應該是validateFunction:validationFunction。儘管現在當我運行get方法時,它甚至不會讀取爲它創建的函數。 – Anamika

回答

相關問題