#axios #next.js #server-side-rendering
Вопрос:
Я устанавливаю токен в localstorage и отправляю его на каждый запрос с помощью (axios), но проблема в том, что при использовании getServerSideProps токен не отправляется, потому что к локальному хранилищу невозможно получить доступ на стороне сервера.
Я думаю, что мне следует использовать файлы cookie, я пробовал js-файлы cookie, но они также не работали на сервере.
Есть ли какое-либо решение для отправки токена на стороне сервера с функцией извлечения в виде getServerSideProps и getStaticProps?
Комментарии:
1. Какую библиотеку вы используете для аутентификации?
2. На самом деле я не использую токены, которые я просто храню в redux-store и localstorage, и отправляю их с каждым запросом на стороне клиента.
3. Вы не можете получить доступ
localStorage
getServerSideProps
, так как он работает на сервере. Попробуйте вместо этого использовать файлы cookie для хранения токена ИЛИ перенести проверку подлинности на сторону клиента.
Ответ №1:
Localstorage работает только на стороне клиента; используйте getInitialProps
function Page({ stars }) {
return <div>Next stars: {stars}</div>
}
Page.getInitialProps = async ({ req }) => {
let token;
// server
if (req) return { page: {} };
else {
// client
const token = localStorage.getItem("auth");
const res = await fetch('https://api.github.com/repos/vercel/next.js', { headers: { Authorization: token }});
const data = await res.json();
return { page: data };
}
};
export default Page
Просто измените мой код, обычно он работает
Комментарии:
1. Это не полностью решает проблему. Логика аутентификации не будет выполняться при первой загрузке страницы и
getInitialProps
запуске на сервере.2. В настоящее время я делаю запросы, для которых требуется аутентификация на стороне клиента, но я думаю, что это не лучший подход, и я не очень хорошо использую ssr с nextjs.