如何在 golang revel 框架中使用 session

我使用 golang web 框架作为我的 web 框架。但是会话不使用。我写的代码如下:


package controllers 


import (

    "fmt"

    "net/http"

    "strconv"


    "GoRBAC/app/base"

    "GoRBAC/app/models"


    r "github.com/revel/revel"

)


type App struct {

    *r.Controller

}


// 首页

func (this App) Index() r.Result {

    userDao := models.NewUserDao()

    user, err := userDao.QueryById(1)

    if err != nil {

        fmt.Println(err)

    }

    fmt.Println(user)

    return this.Render()

}


// 跳转至登录页面

func (this App) ToLogin() r.Result {

    return this.RenderTemplate("App/login.html")

}


func (this App) Login() r.Result {


    username := this.Params.Get("username")

    password := this.Params.Get("password")

    securityCode := this.Params.Get("securityCode")


    fmt.Println(this.Session["securityCode"])

    fmt.Println(username)

    fmt.Println(password)

    fmt.Println(securityCode)


    if securityCode != this.Session["securityCode"] {

        return this.RenderText("error securityCode")

    } else {

        userDao := models.NewUserDao()

        user, err := userDao.QueryByUsername(username)

        if err != nil || user == nil {

            return this.RenderText("username not exsit")

        } else if user.Password != password {

            return this.RenderText("error password")

        } else {

            delete(this.Session, "securityCode")

            this.RenderText("ok")

        }

    }

    return this.RenderText("ok")

}


// 获取验证码图片

func (this App) GetSecurityCode(timestamp int64) r.Result {

    // 时间戳参数,第一次加载为1,后续加载为当前的时间戳,可以用来验证客户端刷新频率

    // 如:刷新频率过高,直接限制当前客户端等

    fmt.Println("GetSecurityCode", timestamp)


    d := make([]byte, 4)

    s := base.NewLen(4)

    ss := ""

    d = []byte(s)


    for v := range d {

        d[v] %= 10

        ss += strconv.FormatInt(int64(d[v]), 32)

    }

}

我在方法 GetSecurityCode() 中设置了 session 中的 securityCode 值,该方法用于生成登录验证的安全代码


我在方法 Login() 中使用了 securityCode 值。但我一无所获


谁能帮助我,我该如何解决这个问题?


慕标琳琳
浏览 178回答 2
2回答

慕村225694

谢谢正如你所说,我解决了这个问题:// 获取验证码图片func (this App) GetSecurityCode(timestamp int64) r.Result {// 时间戳参数,第一次加载为1,后续加载为当前的时间戳,可以用来验证客户端刷新频率// 如:刷新频率过高,直接限制当前客户端等//fmt.Println("GetSecurityCode", timestamp)d := make([]byte, 4)s := base.NewLen(4)ss := ""d = []byte(s)for v := range d {    d[v] %= 10    ss += strconv.FormatInt(int64(d[v]), 32)}this.Session["securityCode"] = ssfmt.Println(this.Session["securityCode"])//this.Response.Status = http.StatusOK//this.Response.ContentType = "image/png"buff := &bytes.Buffer{}base.NewImage(d, 100, 40).WriteTo(buff)return this.RenderBinary(buff, "img", r.Attachment, time.Now())}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go