Reputation: 1635
I trying to set the cookie from the server using fasthttp framework. But the cookie value is not set properly in the response header. I don't know what I have missed in the below snippet.
package main
import (
"log"
"github.com/valyala/fasthttp"
)
func main() {
if err := fasthttp.ListenAndServe(":8080", requestHandler); err != nil {
log.Fatalf("Error in ListenAndServe: %s", err)
}
}
func requestHandler(ctx *fasthttp.RequestCtx) {
switch string(ctx.Path()) {
case "/foo":
cook1 := fasthttp.Cookie{}
cook1.SetKey("cookie_key")
cook1.SetValue("cookie val")
cook1.SetMaxAge(3600000)
cook1.SetDomain("prabhakaran.com")
cook1.SetPath(("/"))
cook1.SetSecure(true)
ctx.Response.Header.Cookie(&cook1)
ctx.SetBody([]byte("this is completely new body contents"))
case "/bar":
//todo: Bar handler
// ctx.SetBody([]byte("111111111111111111111"))
default:
ctx.Error("Unsupported path", fasthttp.StatusNotFound)
}
}
I tried ctx.Response.Header.SetCookie(&cook1) API too. But it won't works. Is anything missed the snippet?
Upvotes: 1
Views: 3368
Reputation: 3055
Here an example of cookie-retrieve
// ParseTokenFromRequest is delegated to retrieved the token encoded in the request. The token can be sent in two different way.
// In first instance the method will try to find the token in the cookie. If the cookie is not provided in the cookie,
// then the research will continue analayzing the body of the request (URL ARGS,GET,POST).
// In case of token not found, an empty string will be returned
func ParseTokenFromRequest(ctx *fasthttp.RequestCtx) string {
token := string(ctx.Request.Header.Cookie("GoLog-Token")) // GoLog-Token is the hardcoded name of the cookie
log.Info("ParseTokenFromRequest | Checking if token is in the cookie ...")
if strings.Compare(token, "") == 0 { // No cookie provided :/ Checking in the request
log.Warn("ParseTokenFromRequest | Token is not in the cookie, retrieving from the request ...")
token = string(ctx.FormValue("token")) // Extracting the token from the request (ARGS,GET,POST)
if strings.Compare(token, "") == 0 { // No token provided in the request
log.Warn("ParseTokenFromRequest | Can not find the token! ...")
return "" // "COOKIE_NOT_PRESENT"
}
log.Info("ParseTokenFromRequest | Token found in request! ... | ", token)
} else {
log.Info("ParseTokenFromRequest | Token found in cookie! ... | ", token)
}
return token
}
Here an example of cookie-set
//CreateCookie Method that return a cookie valorized as input (GoLog-Token as key)
func CreateCookie(key string, value string, expire int) *fasthttp.Cookie {
if strings.Compare(key, "") == 0 {
key = "GoLog-Token"
}
log.Debug("CreateCookie | Creating Cookie | Key: ", key, " | Val: ", value)
authCookie := fasthttp.Cookie{}
authCookie.SetKey(key)
authCookie.SetValue(value)
authCookie.SetMaxAge(expire)
authCookie.SetHTTPOnly(true)
authCookie.SetSameSite(fasthttp.CookieSameSiteLaxMode)
return &authCookie
}
authcookie := CreateCookie('','TEST_VALUE',120)
ctx.Response.Header.SetCookie(authcookie) // Set the token into the cookie headers
ctx.Response.Header.Set("GoLog-Token", token) // Set the token into a custom headers
Here an example of cookie-delete
ctx.Response.Header.DelCookie("GoLog-Token")
Upvotes: 0
Reputation: 26
ctx.Response.Header.Cookie(&cook1)
The Cookie function is used for peek the cookie value. So, use SetCookie function instead of Cookie. If you are running the server in http protocol, remove the cook1.SetSecure(true) statement.
Upvotes: 1