/ / cb हापी-पर-जेवीटी 2 में कोई फ़ंक्शन नहीं है

cb hapi-auth-jwt2 में कोई फ़ंक्शन नहीं है - Node.js - जावास्क्रिप्ट, node.js, jwt, restful-प्रमाणीकरण, hapijs

मै अनुसरन कर रहा हूँ इस लागू करने के लिए ट्यूटोरियल jwt authentication में hapijs v17.2.

मैंने ट्यूटोरियल के अनुसार सब कुछ किया, लेकिन निम्नलिखित त्रुटि मुझे पागल बना रही है, यहां तक ​​कि डिबगिंग भी नहीं हुई।

त्रुटि

Debug: internal, implementation, error
TypeError: cb is not a function
at Object.secretProvider [as key] (C:UsersuserWebstormProjectshapi-blognode_modulesjwks-rsalibintegrationshapi.js:30:14)
at Object.authenticate (C:UsersuserWebstormProjectshapi-blognode_moduleshapi-auth-jwt2libindex.js:123:87)
at module.exports.internals.Manager.execute (C:UsersuserWebstormProjectshapi-blognode_moduleshapilibtoolkit.js:35:106)
at module.exports.internals.Auth._authenticate (C:UsersuserWebstormProjectshapi-blognode_moduleshapilibauth.js:242:58)
at authenticate (C:UsersuserWebstormProjectshapi-blognode_moduleshapilibauth.js:217:21)
at module.exports.internals.Request._lifecycle (C:UsersuserWebstormProjectshapi-blognode_moduleshapilibrequest.js:261:62)
at <anonymous>

app.js

const hapi = require("hapi");
const mongoose = require("./db");
const hapi_auth_jwt = require("hapi-auth-jwt2");
const jwksa_rsa = require("jwks-rsa");
const dog_controller = require("./controllers/dog");

const server = new hapi.Server({
host: "localhost",
port: 4200
});

const validate_user = (decoded, request, callback) => {
console.log("Decoded", decoded);
if (decoded && decoded.sub) {
return callback(null, true, {});
}

return callback(null, true, {});
};

const register_routes = () => {
server.route({
method: "GET",
path: "/dogs",
options: {
handler: dog_controller.list,
auth: false
}
});

// Test
server.route({
method: "POST",
path: "/a",
options: {
handler: (req, h) => {
return h.response({message: req.params.a});
},
auth: false
}
});

server.route({
method: "GET",
path: "/dogs/{id}",
options: {
handler: dog_controller.get
}
});

server.route({
method: "POST",
path: "/dogs",
options: {
handler: dog_controller.create
}
});

server.route({
method: "PUT",
path: "/dogs/{id}",
handler: dog_controller.update
});

server.route({
method: "DELETE",
path: "/dogs/{id}",
handler: dog_controller.remove
});
};

const init = async () => {
await server.register(hapi_auth_jwt);

server.auth.strategy("jwt", "jwt", {
key: jwksa_rsa.hapiJwt2Key({
cache: true,
rateLimit: true,
jwksRequestsPerMinute: 5,
// YOUR-AUTH0-DOMAIN name e.g https://prosper.auth0.com
jwksUri: "https://mrvar.auth0.com/.well-known/jwks.json"
}),
verifyOptions: {
audience: "https://mrvar.auth0.com/api/v2/",
issuer: "https://mrvar.auth0.com",
algorithm: ["RS256"]
},
validate: validate_user
});

server.auth.default("jwt");

// Register routes
register_routes();

// Start server
await server.start();

return server;
};

init().then(server => {
console.log("Server running at: ", server.info.uri);
}).catch(err => {
console.log(err);
});

जब मैं मार्गों से अनुरोध करता हूं auth: falseहैंडलर ठीक से काम करता है तो मुझे अपेक्षित परिणाम मिलता है, लेकिन बिना मार्गों के अनुरोध के auth निम्नलिखित json लौटाएँ:

{
"statusCode": 500,
"error": "Internal Server Error",
"message": "An internal server error occurred"
}

और जानकारी:

नोड संस्करण: 8.9.4

एनपीएम संस्करण: 5.6.0

हपी संस्करण: 17.2.0

hapi-dif-jwt2: github: सलझरानी / hapi-Andor-jwt2 # v-17

jwks-rsa: 1.2.1

मोंगोज़: 5.0.6

नोडोमैन: 1.15.0

उत्तर:

उत्तर № 1 के लिए 1

कॉलबैक फ़ंक्शन के लिए hapi @ 17 में मान्य फ़ंक्शन परिवर्तित हो गया। आपके उदाहरण के आधार पर अब इसे कुछ इस तरह देखना चाहिए:

const validate = async (decoded, request) => {
if (decoded && decoded.sub) {
return { isValid: true };
}
return { isValid: false );
};

लौटी हुई वस्तु का हिस्सा भी शामिल हो सकता है credentials जो प्रमाणित किए गए उपयोगकर्ता का प्रतिनिधित्व करता है और आप क्रेडेंशियल्स के हिस्से के रूप में एक गुंजाइश भी कर सकते हैं।

फिर यदि आप चाहें तो क्रेडेंशियल्स तक पहुँच सकते हैं request वस्तु जैसी request.auth.credentials