Как получить cookie и сессию вне контроллера в beego - PullRequest
0 голосов
/ 23 сентября 2019

Я хочу получить и установить cookie в моем сервисном файле, но код "ctx.SetCookie ()" всегда получаю ошибку "неверный адрес памяти или разыменование нулевого указателя", пожалуйста, помогите мне, заранее спасибо

Я пробовал два метода для решения этой проблемы, но все еще что-то не так с ним

метод 1:

type security struct {
    beego.Controller
}
...
func (s security) CheckToken(){
    ...

    ctx.SetCookie("token","xxxxxxxx")
}

Методы 2:

import "github.com/astaxie/beego/context"

func (s security) CheckToken(){
    ...
    ctx := context.NewContext()
    ctx.SetCookie("token","xxxxxxxx")
}

паника:ошибка времени выполнения: неверный адрес памяти или разыменование нулевого указателя [сигнал SIGSEGV: код нарушения сегментации = 0x1 адрес = 0x10 пк = 0x832639]

1 Ответ

0 голосов
/ 23 сентября 2019

Установить cookie можно с помощью .SetCookie() метода объекта контекста beego.Сам объект контекста доступен через любой контроллер, который встраивает beego.Controller.

func (c *MainController) SetToken() {
    c.Ctx.SetCookie("token", "xxxxxxxx")
}

func (c *MainController) GetToken() {
    cookieValue := c.Ctx.GetCookie("token")
    fmt.Println(cookieValue)
}

Документ https://beego.me/docs/module/context.md

Обновление # 1

Я хочу установитьcookie вне контроллера

Вам нужно передать контекстный объект контроллера в конкретную функцию.Например:

package models

import "github.com/astaxie/beego/context"

func SetCookieFromHere(ctx *context.Context) {
    ctx.SetCookie("token", "xxxxxxxx")
}
package controllers

import "yourpackage/models"

func (c *MainController) SetToken() {
    models.SetCookieFromHere(c.Ctx)
}
...