Я реализую службу 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), он покажет содержимое информационной панели.
Спасибо за помощь.