go - Cookie 不使用 Golang 设置

标签 go cookies

我有一个用于登录用户的 REST API,它在浏览器上为登录用户设置一个 cookie,并且运行良好。 问题是当用户从注册 API 完成注册时我想调用登录​​ API,这样每件事都运行良好但 cookie 未设置为浏览器。

这是登录API:

var loginViaDjangoApiShim = http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {

        var t loginPost
        var oldCookieToken string

        decoder := json.NewDecoder(r.Body)
        _:= decoder.Decode(&t)
        expiration := time.Now().Add(365 * 24 * time.Hour)

        flagToReturn, cookie, _:= postToApiShim(t.Username, t.Password)
        if flagToReturn == "pass" {
            CookieToken = generateOldCookie(authIdFromUserName.ID)

            newCookieToSet := http.Cookie{Name: "ddagyeog", Value: CookieToken , Expires: expiration, Domain: COOKIE_DOMAIN, Path: "/", Secure: false, HttpOnly: true}
            http.SetCookie(w, &newCookieToSet)
        }
        returnValues := returnLoginFlag{Flag: flagToReturn, Cookie: ""}
        json.NewEncoder(w).Encode(returnValues)

    })

这里是注册API:

var signUpStart = http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {

    var t StartFlowPost

    decoder := json.NewDecoder(r.Body)
    _:= decoder.Decode(&t)
        insertIntoUser := InsertMethod(t)
            flag, _ := loginOnCoppaAndNonCoppaUsersSignup(t.UserName, t.Password)

        log.Println(flag)
        json.NewEncoder(w).Encode(flag)

})

下面是 loginOnCoppaAndNonCoppaUsersSignup,它在注册用户后调用登录 API。

func loginOnCoppaAndNonCoppaUsersSignup(userName, password string) (flag returnSignUpFlagCoppa, err error) {
    var loginFlag returnLoginFlag
    var jsonStr = []byte(`{
    "username":"` + userName + `",
    "password":"` + password + `"
    }`)

    request, _ := http.NewRequest("POST", USER_ROOT_URL+"login", bytes.NewBuffer(jsonStr))
    request.Header.Set("Content-Type", "application/json")

    client := &http.Client{}
    response, _:= client.Do(request)

    decoder := json.NewDecoder(response.Body)
    if err = decoder.Decode(&loginFlag); err != nil {
        return flag, err
    }

    if loginFlag.Flag == "pass" {
        flag = returnSignUpFlagCoppa{Flag: "pass", Username: userName}
        log.Println(flag)
    } else {
        flag := returnSignUpFlagCoppa{Flag: "error"}
        log.Println(flag)
    }

    return flag, nil
}

最佳答案

在这里您可以从登录 URL 响应中获取 cookie。

cookies := response.Cookies()

然后您必须在注册 API 中再次使用 http.SetCookie() 设置这些 cookie。请按照以下代码操作。

for _, cookie := range response.Cookies() {
    http.SetCookie(w, cookie)
 }

关于go - Cookie 不使用 Golang 设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52312231/

相关文章:

javascript - 如何从cookie中读取json对象

networking - UDPConn Close 到底做了什么?

mongodb - 如何在 Golang 的 MGO mongo db 驱动程序中获取我的文档的 ObjectId (_id)

go - 创建未知类型的 slice ?

asp.net - 为其他网站存储 cookie

javascript - 纯 Javascript - 在 cookie 中存储对象

go - 当我的通配符参数中有双斜杠时,为什么 Gorilla mux 会重定向?

mysql - 从迁移创建存储过程

javascript - C# WebApi + Angular 4 Set-Cookie 不保存cookie

node.js - 使用 Node.js 和 jsonwebtoken 在哪里做 JWT 到期?