Beego session获取删除校验

页面跳转流程

127.0.0.1/login 回车login.html -> (正确登陆) -> temp.html -> welcome.html

127.0.0.1/login 回车login.html -> (错误登陆) -> bad.html

127.0.0.1/logintemp 回车temp.html -> 先前没有登陆 -> login.html

127.0.0.1/logintemp 回车temp.html -> 先前有登陆 -> welcome.html

处理login.html中登陆post的请求,方法位于user.go控制文件中

func (c *UserController) Reallogin() {
	id, _ := c.GetInt("userid") // 获取表单数据
	password := c.GetString("password")
	valid := validation.Validation{}
	valid.Required(id, "id") // 校验
	valid.Required(password, "password")
	switch { // 判断是否有错
	case valid.HasErrors():
		fmt.Println(valid.Errors[0].Key + valid.Errors[0].Message)
		c.TplName = "bad.html"
		return
	}
	u := &class.User{ // 定义一个User对象,该对象在models/class中
		Id:       id,
		Password: password,
	}
	err := u.ReadDB()
	if err != nil {
		fmt.Println(err)
		c.TplName = "bad.html"
		return
	}
	c.DoLogin(*u) // 继承base.go
	c.TplName = "temp.html"
}

继承base.go,需要在代码中添加

type UserController struct {
	// beego.Controller
	BaseController
}

base.go代码

package controllers

import (
	"blog/06blog/models/class"
	"github.com/astaxie/beego"
)

type BaseController struct {
	beego.Controller
}

func (c *BaseController) Prepare() {
	if c.IsLogin() {
		c.Data["user"] = c.GetSession("user").(class.User)
	}
}

func (c *BaseController) DoLogin(u class.User) { // 将登陆信息放入session中
	c.SetSession("user", u)
}

func (c *BaseController) DoLogout() { // 删除session
	c.DestroySession()
	c.Abort("302")
}

func (c *BaseController) IsLogin() bool { // 判断是否登陆
	return c.GetSession("user") != nil
}

func (c *BaseController) CheckLogin() { // 检查是否登陆,如果没有登陆就执行返回到/login连接
	if !c.IsLogin() {
		c.Redirect("/login", 302)
		c.Abort("302")
	}
}

处理temp.html中的post请求,方法位于user.go控制文件中

func (c *UserController) Check() {
	if c.IsLogin() { // 判断是否登陆,如果登陆就输出welcome.html页面
		c.TplName = "welcome.html"
	} else { // 没有登陆就跳转到/login链接
		c.Redirect("/login", 302)
		c.Abort("302")
	}
}

 

 

 

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

开始在上面输入您的搜索词,然后按回车进行搜索。按ESC取消。

返回顶部