1.创建模型Member结构体
type Member struct {
MemberId int `orm:"pk;auto" json:"member_id"`
Account string `orm:"size(30);unique" json:"account"`
Nickname string `orm:"size(30);unique" json:"nickname"`
Password string `json:"-"`
Description string `orm:"size(640)" json:"description"`
Email string `orm:"size(100);unique" json:"email"`
Phone string `orm:"size(20);null;default(null)" json:"phone"`
Avatar string `json:"avatar"`
Role int `orm:"default(1)" json:"role"`
RoleName string `orm:"-" json:"role_name"`
Status int `orm:"default(0)" json:"status"`
CreateTime time.Time `orm:"type(datetime);auto_now_add" json:"create_time"`
CreateAt int `json:"create_at"`
LastLoginTime time.Time `orm:"type(datetime);null" json:"last_login_time"`
}
func (m *Member) TableName() string {
return "md_member"
}
func NewMember() member *Member {
return &Member{}
}
2.在BaseController
里创建验证
import "github.com/astaxie/beego"
import "go_mbook/models"
import "time"
type BaseController struct {
beego.Controller
Member *models.Member
Option map[string]string
EnableAnonymous bool
}
type CookieRemember struct {
MemberId int
Account string
Time time.Time
}
func (c *BaseController) PrePare() {
c.Member = models.NewMember()
c.EnableAnonymous = false
if member, ok := c.GetSession(common.SessionName).(models.Member); ok && member.MemberId > 0 {
c.Member = &member
}
} else {
if cookie, ok := c.GetSecureCookie(common.AppKey(), "login"); ok {
var remember CookieRemember
err := utils.Decode(cookie, &remember)
if err == nil {
member, err := models.NewMember().Find(remember.MemberId)
if err == nil {
c.SetMember(*member)
c.Member = member
}
}
}
}
func (c *BaseController) SetMember(member models.Member) {
if member.MemberId <= 0 {
c.DelSession(common.SessionName)
c.DelSession("uid")
c.DestroySession()
} else {
c.SetSession(common.SessionName, member)
c.SetSession("uid", member.MemberId)
}
}
3. 登录逻辑
var remember CookieRemember
if cookie, ok := c.GetSecureCookie(common.AppKey(), "login"); ok {
if err := utils.Decode(cookie, &remember); err == nil {
if err = c.login(remember.MemberId); err == nil {
c.Redirect(beego.URLFor("HomeController.Index"), 302)
return
}
}
}
if c.Ctx.Input.IsPost() {
account := c.GetString("account")
password := c.GetString("password")
member, err := models.NewMember().Login(account, password)
fmt.Println(err)
if err != nil {
c.JsonResult(1, "登录失败", nil)
}
member.LastLoginTime = time.Now()
member.Update()
c.SetMember(*member)
remember.MemberId = member.MemberId
remember.Account = member.Account
remember.Time = time.Now()
v, err := utils.Encode(remember) // 这里是封装的encode cookie的包
if err == nil {
c.SetSecureCookie(common.AppKey(), "login", v, 24*3600*365)
}
c.JsonResult(0, "ok")
}
c.Data["RandomStr"] = time.Now().Unix()