@Ebers-Hyde

Как реализовать авторизацию в next-приложении с применением api yii2?

Добрый день. Я в процессе изучения next.js/react и создания проекта на основе next (фронтенд) и php-фреймворка yii2 (бэк). Уже третью неделю я нахожусь в полном тупике и не могу сделать нормальную авторизацию посредством rest. Саму по себе связь между ними я наладил, получить данные из api я могу. Но в некоторых местах мне необходимо сразу же рендерить пользовательские данные, если они присутствуют (в первую очередь это хедер с username пользователя и далее ещё добавится количество товаров в корзине). Нюанс в том, что бэк занимает маршрут /api, который нужен нексту для общения с сервером. Поэтому мне приходится писать авторизацию самому без применения библиотек. Сначала я пытался после логина сохранить в куки браузера username и при загрузке приложения если он есть рендерить хедер с ним, однако это ломает мне вёрстку по причине того, что на сервере кук не видно а значит страница формируется по одному шаблону, а на клиенте пытается подставить данные. Затем я решил сохранять в куки auth_token и получать username в _app.tsx методом getInitialProps, опираясь на статью https://jools.dev/server-side-auth-with-nextjs-con.... Однако, и там в контексте приложения куки нет, из-за чего запрос заканчивается неудачей. Для большей наглядности выгрузил фронт проекта в codesandbox - https://codesandbox.io/s/applecart-next-o9u4v Штука в том что здесь куки внутри myApp.ctx.req.cookies присутствуют, если вывести их в консоль, а вот на моём сервере уже нет.

Знающие, подскажите пожалуйста, как я в данной ситуации могу добиться хранения кук и чтения их для получения необходимых данных при первоначальной отрисовке?
  • Вопрос задан
  • 233 просмотра
Пригласить эксперта
Ответы на вопрос 1
SilenceOfWinter
@SilenceOfWinter Куратор тега PHP
та еще зажигалка...
Нюанс в том, что бэк занимает маршрут /api, который нужен нексту для общения с сервером

ну так не занимай его, в чем проблема? кроме того маршрутизация nextjs не связана с маршрутизацией yii

можешь попробовать такой вариант
https://ru.wikipedia.org/wiki/JSON_Web_Token
https://github.com/sizeg/yii2-jwt
https://github.com/vercel/examples/tree/main/edge-...
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
07 мая 2024, в 18:23
20000 руб./за проект
07 мая 2024, в 18:09
2000 руб./за проект
07 мая 2024, в 17:40
300 руб./за проект