В моей системе у меня есть несколько микро сервисов, работающих как docker контейнеры.
В шлюзе:
func home(res http.ResponseWriter,req *http.Request){
authorized := req.FormValue("authorize")
if authorized == "1"{
user := req.FormValue("user")
expirationTime := time.Now().Add(5 * time.Minute)
// // creating JWT for user
jwt,jwtErr := GenerateJWT(user)
if jwtErr != nil{
log.Println("Error generating JWT, cant go further")
return
}
// Setting jwt cookie
http.SetCookie(res, &http.Cookie{
Name: "usertoken",
Value: jwt,
Expires: expirationTime,
})
http.Redirect(res, req, "/test", http.StatusFound)
}
}
Для целей тестирования:
func test(res http.ResponseWriter,req *http.Request){
log.Println("Test function called")
fmt.Fprintf(res, "You have been redirected here!")
}
Архитектура:
API Gateway User Service
|
Receives -----> |
(http://localhost:7070/login?email=...) |
Process credentials
( If success )
/home <----- (_, err := http.PostForm(".../home", url.Values{"uid":....)
(adds JWT and pass to /test)
|
/test
Для тестирования системы я использую веб-браузер и http://localhost:7070/login?email=test@email.com&password=hi
Это идет к user-service
, и аутентификация затем user-service
отправляет форму для значений gateway-service
/home
route.
Служба пользователя PostForm
до gateway
_, err := http.PostForm("http://localhost:7070/home", url.Values{"uid": {requestID},"user":{userID},"authorize": {"1"}})
URL должен перенаправляться на http://localhost:7070/test
Это работает внутри системы и даже достигает проверить функцию регистрации. Но URL браузера не изменяется, и я получаю 404 Error
в ответе браузера.
Мой предыдущий вопрос , как и предполагалось, я купил установку файлов cookie для одного домена.
Тестовый образец был протестирован, этот образец отлично работает в моей локальной среде.
Если кто-то хочет, чтобы полный код тестировал сценарий: https://github.com/sachithmuhandiram/codereview/tree/login_token
Редактировать :
Как и предлагалось в комментариях, у меня есть жестко запрограммированные значения и я проверил доступ к localhost:7070/home
, он успешно перенаправляет на /test
маршрут с поваром ie.
Если я пытаюсь использовать localhost:7070/login
с жестко заданными значениями, это перенаправление не происходит.
В пользовательском сервисе я использовал и http.Redirect(res,req,"localhost:7070/home",StatusSeeOther)
, и http.PostForm("http://localhost:7070/home")
Здесь пользовательский сервис просто только вызывает / перенаправляет до /home
маршрута, готовить ie настройка сделана в /home