Golang http.redirect не работает в браузере - PullRequest
0 голосов
/ 06 апреля 2020

В моей системе у меня есть несколько микро сервисов, работающих как 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

...