Я использую API fetch для отправки запроса в мой сервис golang, который выдает jwt. Служба устанавливает повара ie со значением jwt. Я вижу, что этот повар ie устанавливается при использовании Postman, но в моем приложении для внешнего интерфейса этот повар ie не устанавливается.
Некоторые другие вещи, которые могут быть связаны с проблемой:
Я используя в качестве браузера последнюю версию Google Crome
Мой веб-интерфейс построен с использованием React
Мой веб-интерфейс и сервер работают под управлением localhost
Почему не установлен токен Cook ie? 1008 *
JavaScript запрос на выборку
const getToken = (googleTokenId: string) => {
fetch("http://localhost:8085/token/issue-token", {
method: "POST",
body: JSON.stringify({googleTokenId}),
credentials: "same-origin",
headers: {
Accept: 'application/json'
}
}).then(response => {
console.log(response)
})
}
Golang обработчик
func IssueToken(write http.ResponseWriter, request *http.Request) {
// CORS
if request.Method == http.MethodOptions {
Preflight(write)
return
}
write.Header().Set("Access-Control-Allow-Origin", "http://localhost:3000")
// ...
// some unrelated code
// ...
// Generate and encrypt token
tokenString, err := GenerateToken(authCredentials)
if err != nil {
log.Println(err)
write.WriteHeader(http.StatusInternalServerError)
return
}
tokenEncryptedByte, err := Encrypt([]byte(tokenString), encryptionKey)
if err != nil {
log.Println(err)
write.WriteHeader(http.StatusInternalServerError)
return
}
// Issue token for user
expirationTime := time.Now().Add(5 * time.Minute)
http.SetCookie(write, &http.Cookie{
Name: "token",
Value: Encode64(tokenEncryptedByte),
Expires: expirationTime,
})
log.Println("Success: Token was sent")
}