Веб-сайт Auth Nextjs из getInitialProps с локальным хранилищем или cookie и Apollo

У меня проблемы с процессом авторизации в проекте Nextjs. Из пример он сохраняет токен в файлах cookie, но в checkLoggedIn.js он запрашивает БД вместо получения токена из cookie.

Я хотел бы получить токен из cookie или localstorage в getInitialProps, но в getInitialProps он НЕ может видеть localstorage, потому что он все еще находится на стороне сервера. Есть ли лучший способ авторизации пользователя перед рендерингом компонента?

Не уверен, что можно получить токен от getToken в клиенте apollo.

Мой текущий код

class DashBoard extends React.Component {
  constructor(props) {
    super(props)
  }

  componentDidMount () {
    const decodeToken = verifyToken(localStorage.getItem('KEY'));

    if (!decodeToken.mail) {
        Router.push('/login');
    } else {
        this.props.loginSuccess(decodeToken.name, decodeToken.mail);
    }
  }
  render () {
      return (<div></div>)
  }
}

Спасибо

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
1
0
1 688
2

Ответы 2

Я решил это с помощью новички. Он работает как на стороне сервера (для getInitialProps), так и на стороне клиента в Next.js

Вот что я сделал, чтобы решить эту проблему после нескольких дней исследований (честно говоря, не лучшая документация)

В getInitialProps я взял заголовки из запросов и скопировал их в свой запрос fetch.


Profile.getInitialProps = async ({ req }) => {

  const headers = { ...req.headers }
  const url = `http://localhost:3000/api/profile`

  const data = await fetch(url, { headers }).then(res => res.json())

  return { data }
}

Имейте в виду, что это работает только на сервере. Для клиента вы можете просто передать {credentials: 'include'} в fetch

Другие вопросы по теме