这个问题通常出现在在调用 adminJS.buildAuthenticatedRouter() 方法时,因为在该方法中使用的身份验证不起作用。
要解决这个问题,可以尝试以下几种方法:
首先确保输入的用户名和密码正确,并且与数据库中的凭证一致。如果登录凭证不正确,则无法通过身份验证。
确保身份验证配置是正确的。例如,如果您使用了基于会话的身份验证,那么确保您的应用程序配置和代码应该是正确的。如果您使用的是基于 token 的身份验证,则确保您的令牌验证中间件正确配置。
如果您已经成功验证身份,则可能是您的页面没有权限来访问。确保您的页面配置和代码正确。
以下是一个示例,在使用基于会话的身份验证时如何正确构建验证路由:
// Require adminjs and your preferred authentication module const AdminJS = require('adminjs'); const session = require('express-session'); const express = require('express'); const bcrypt = require('bcrypt');
// Build your adminJ AdminJS instance const adminJs = new AdminJS({ // your options here });
// Set up your app with an express session const app = express(); app.use(session({ secret: 'my-top-secret-key', resave: false, saveUninitialized: true, }));
// Build the authenticated router const buildAuthenticatedRouter = async (admin, authenticate = async (email, password) => { const user = await admin.findUser({ email }); if (!user) { return null; } const matched = await bcrypt.compare(password, user.encryptedPassword); if (!matched) { return null; } return user; }) => { const router = AdminJS.express.Router();
// Authentication middleware router.use(async (req, res, next) => { if (req.session && req.session.userId) { try { const user = await authenticate(req.session.userId); if (user) { next(); return; } } catch (e) { console.error(e); } } res.redirect(admin.getOptions().loginPath); });
// Register all resources to the authenticated router admin.getResources().forEach(resource => { const routerAlias = resource.getResourceRouterAlias(); const resourceRouter = AdminJS.routerForResource(admin, resource, { authenticate });
router.use(`/${routerAlias}`, resourceRouter);
});
return router; };
// Use the buildAuthenticatedRouter to build your router const myRouter = await buildAuthenticatedRouter(adminJs);
// Use the router for any adminjs routes app.use('/admin', myRouter);
注意:上述代码示例是基于会话的身份验证方法,具体实现将根据您的需求而变化。