Я внедряю сервис Nextjs с koa
, koa-router
и 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) , показывает содержимое панели.
Спасибо за помощь.