未知的身份验证策略护照JS
我想为我的应用程序拥有2种不同的护照JS实例(用户和管理员 - 均带有JWT Authentification)。我在官方文档中读到,区分它们的方法是命名它们。
我想念什么?我想念出口吗?
var Passport = require('passport').Passport,
passport_authorised = new Passport();
const JwtStrategy = require("passport-jwt").Strategy,
ExtractJwt = require("passport-jwt").ExtractJwt;
const opts ={}
require('dotenv').config();
const databaseServiceAdmins = require('../../services/database_service_admin')
opts.jwtFromRequest = ExtractJwt.fromAuthHeaderWithScheme('Bearer')
opts.secretOrKey = process.env.ACCESS_TOKEN_SECRET
passport_authorised.use("admin-rule",new JwtStrategy(opts,async function (jwt_payload, done) {
const doesUserExists = await databaseServiceAdmins.adminExists(jwt_payload.email)
if (doesUserExists.success === true && jwt_payload.access_rights === "privileged")
done(null, doesUserExists.item)
else
done(null, false)
}));
const express = require("express")
const router = express.Router()
const adminDatabaseService = require('../../services/database_service_admin')
const jwt = require("jsonwebtoken");
const {callback} = require("pg/lib/native/query");
const passport_authorised = require("passport");
require('../json_authorisation/passport_authorised')
const {approvePtoRequestByAdmin, dropOnePtoDay} = require("../../services/database_service_admin");
const bcrypt = require("bcrypt");
router.get("/all/not-approved",passport_authorised.authenticate("admin-rule",{session:false},callback),
async (req,res)=>{
const aux = await adminDatabaseService.getAllNotApprovedPtos()
return res.status(200).send(
aux
)
})
module.exports = router;
错误是:
错误:未知身份验证策略“管理规则” (/home/radu/desktop/licenta/backend/node_modules/passport/lib/middleware/authenticate.js:193:39) 在身份验证 (/home/radu/desktop/licenta/backend/node_modules/passport/lib/middleware/authenticate.js:370:7) 在layer.handle [as handle_request] (/home/radu/desktop/licenta/backend/node_modules/express/lib/router/layer.js:95:5) 接下来 (/home/radu/desktop/licenta/backend/node_modules/express/lib/router/route.js:137:13) 在路由 (/home/radu/desktop/licenta/backend/node_modules/express/lib/router/route.js:112:3) 在layer.handle [as handle_request] (/home/radu/desktop/licenta/backend/node_modules/express/lib/router/layer.js:95:5) 在 /home/radu/desktop/licenta/backend/node_modules/express/lib/router/index.js:281:22 在function.process_params (/home/radu/desktop/licenta/backend/node_modules/express/lib/router/index.js:341:12) 接下来 (/home/radu/desktop/licenta/backend/node_modules/express/lib/router/index.js:275:10) 在function.handle (/home/radu/desktop/licenta/backend/node_modules/express/lib/router/index.js:174:3)
I want to have 2 different instances of passport Js for my app (user and admin - both with jwt authentification ). I read in the official documentation that the way to distinguish between them is to name them.
What am I missing? Am i missing an export or something ?
var Passport = require('passport').Passport,
passport_authorised = new Passport();
const JwtStrategy = require("passport-jwt").Strategy,
ExtractJwt = require("passport-jwt").ExtractJwt;
const opts ={}
require('dotenv').config();
const databaseServiceAdmins = require('../../services/database_service_admin')
opts.jwtFromRequest = ExtractJwt.fromAuthHeaderWithScheme('Bearer')
opts.secretOrKey = process.env.ACCESS_TOKEN_SECRET
passport_authorised.use("admin-rule",new JwtStrategy(opts,async function (jwt_payload, done) {
const doesUserExists = await databaseServiceAdmins.adminExists(jwt_payload.email)
if (doesUserExists.success === true && jwt_payload.access_rights === "privileged")
done(null, doesUserExists.item)
else
done(null, false)
}));
const express = require("express")
const router = express.Router()
const adminDatabaseService = require('../../services/database_service_admin')
const jwt = require("jsonwebtoken");
const {callback} = require("pg/lib/native/query");
const passport_authorised = require("passport");
require('../json_authorisation/passport_authorised')
const {approvePtoRequestByAdmin, dropOnePtoDay} = require("../../services/database_service_admin");
const bcrypt = require("bcrypt");
router.get("/all/not-approved",passport_authorised.authenticate("admin-rule",{session:false},callback),
async (req,res)=>{
const aux = await adminDatabaseService.getAllNotApprovedPtos()
return res.status(200).send(
aux
)
})
module.exports = router;
Error is:
Error: Unknown authentication strategy "admin-rule" at attempt
(/home/radu/Desktop/licenta/backend/node_modules/passport/lib/middleware/authenticate.js:193:39)
at authenticate
(/home/radu/Desktop/licenta/backend/node_modules/passport/lib/middleware/authenticate.js:370:7)
at Layer.handle [as handle_request]
(/home/radu/Desktop/licenta/backend/node_modules/express/lib/router/layer.js:95:5)
at next
(/home/radu/Desktop/licenta/backend/node_modules/express/lib/router/route.js:137:13)
at Route.dispatch
(/home/radu/Desktop/licenta/backend/node_modules/express/lib/router/route.js:112:3)
at Layer.handle [as handle_request]
(/home/radu/Desktop/licenta/backend/node_modules/express/lib/router/layer.js:95:5)
at
/home/radu/Desktop/licenta/backend/node_modules/express/lib/router/index.js:281:22
at Function.process_params
(/home/radu/Desktop/licenta/backend/node_modules/express/lib/router/index.js:341:12)
at next
(/home/radu/Desktop/licenta/backend/node_modules/express/lib/router/index.js:275:10)
at Function.handle
(/home/radu/Desktop/licenta/backend/node_modules/express/lib/router/index.js:174:3)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
与其具有2个JWT功能,一个用于管理员,另一个用于无私人用户,而是尝试添加JWT某些角色(在我们的情况下为Admin/用户)。并用秘密钥匙签署JWT。
在解码JWT时,在中间件上进行验证,然后检查其中的角色。并且允许/不允许通过。
Instead of having 2 JWT functionalities, one for admin and one for the unprivileged user, try to add in your JWT some roles (admin/user in our case). And sign the JWT with a secret key.
On a middleware when you decode JWT, validate it, and after check what role is in it. And allow/don't allow to pass.