#javascript #reactjs #graphql #next.js #frontend
Вопрос:
Является ли токен запроса на извлечение в next.js приложение, видимое пользователю на стороне клиента?
Я должен подготовить приложение с использованием API GitHub GraphQL. Я думал об использовании запроса на извлечение с токеном на предъявителя для него, но у меня есть сомнения в безопасности и хороших практиках в моем приложении.
fetch((`https://api.github.com/graphql`, {
method: 'POST',
headers: {
"Content-Type": 'application/json',
'Authorization': 'Bearer ' TOKEN,
},
body: JSON.stringify({
query: `
{
search(query: "is:public", type: REPOSITORY, first: 10) {
repositoryCount
pageInfo {
endCursor
startCursor
}
edges {
node {
... on Repository {
name
}
}
}
}
}
`
})
}))
Комментарии:
1. Если вы делаете это на интерфейсе, как предполагает ваш тег, то токен может быть перехвачен
2. Это зависит от того, откуда вы делаете запрос. Если запрос сделан внутри
getStaticProps
/getServerSideProps
или по маршруту API, запрос (и токен) не будут видны клиенту. Если это будет сделано на стороне клиентаuseEffect
, то это будет видно.
Ответ №1:
В соответствии с Next.js документы, вам нужно создать .env.local
файл в корневом каталоге проекта и добавить секреты.
При добавлении секретов вам нужно добавить к секрету префикс NEXT_PUBLIC_
, чтобы открыть его для браузера. Например:
NEXT_PUBLIC_GITHUB_TOKEN=amogussus
Согласно документам:
Значение будет встроено в JavaScript, отправленное в браузер из-за
NEXT_PUBLIC_
префикса.
Затем вы можете добавить его в свой код с помощью process.env.NEXT_PUBLIC_GITHUB_TOKEN