我正在使用koa
,koa-router
和实现 Nextjs 服务kow-jwt
,但我对它们的路由设置感到困惑。
我的项目有 2 个页面,一个是仪表板,另一个是登录。仪表板需要通过验证,登录不。如果身份验证失败,则将用户重定向到登录页面。
我在互联网上搜索,发现了一些示例如下,没有一个将它们链接在一起。
请给我一些建议,让他们一起工作。
const app = next({dev});
const handle = app.getRequestHandler();
app.prepare()
.then(() => {
const server = new koa();
const router = new koaRouter();
router.get('/login', async ctx => {
await app.render(ctx.req, ctx.res, '/login', ctx.query);
ctx.respond = false;
});
router.get('/dashboard',
jwt({
secret: config.graphqlSecret
}),
async ctx => {
await app.render(ctx.req, ctx.res, '/dashboard', ctx.query);
ctx.respond = false;
}
);
// what is the purpose of this route?
router.get('*', async ctx => {
await handle(ctx.req, ctx.res);
ctx.respond = false;
});
server.use(async (ctx, next) => {
try {
await next();
} catch (err) {
if (err.statusCode === 401) {
ctx.redirect('/login');
}
}
});
server.use(router.routes());
server.use(router.allowedMethods());
server.listen(3000);
});
使用上面的代码,行为是
- 如果我链接到带有和不带有 jwt 令牌的仪表板,它总是重定向到登录页面。
- 如果我从菜单链接到仪表板(
<Link>
在 Nextjs 中实现),它会显示仪表板的内容。
谢谢您的帮助。