解决Cookie记住登录不生效的BUG

pull/219/merge
Minho 2018-03-09 10:55:50 +08:00
parent 7db72f2049
commit 2a9d8cc5df
3 changed files with 32 additions and 16 deletions

View File

@ -5,7 +5,8 @@ runmode = dev
sessionon = true sessionon = true
sessionname = mindoc_id sessionname = mindoc_id
copyrequestbody = true copyrequestbody = true
#系统完整URL(http://doc.iminho.me),如果该项不设置,会从请求头中获取地址。
baseurl=
#默认Session生成Key的秘钥 #默认Session生成Key的秘钥
beegoserversessionkey=123456 beegoserversessionkey=123456

View File

@ -25,11 +25,6 @@ func (c *AccountController) Login() {
c.Prepare() c.Prepare()
c.TplName = "account/login.tpl" c.TplName = "account/login.tpl"
var remember struct {
MemberId int
Account string
Time time.Time
}
if member, ok := c.GetSession(conf.LoginSessionName).(models.Member); ok && member.MemberId > 0 { if member, ok := c.GetSession(conf.LoginSessionName).(models.Member); ok && member.MemberId > 0 {
u := c.GetString("url") u := c.GetString("url")
@ -41,13 +36,12 @@ func (c *AccountController) Login() {
} }
c.Redirect(u,302) c.Redirect(u,302)
} }
var remember CookieRemember
// 如果 Cookie 中存在登录信息 // 如果 Cookie 中存在登录信息
if cookie, ok := c.GetSecureCookie(conf.GetAppKey(), "login"); ok { if cookie, ok := c.GetSecureCookie(conf.GetAppKey(), "login"); ok {
if err := utils.Decode(cookie, &remember); err == nil { if err := utils.Decode(cookie, &remember); err == nil {
if member, err := models.NewMember().Find(remember.MemberId); err == nil { if member, err := models.NewMember().Find(remember.MemberId); err == nil {
c.SetMember(*member) c.SetMember(*member)
c.LoggedIn(false) c.LoggedIn(false)
c.StopRun() c.StopRun()
} }
@ -58,7 +52,7 @@ func (c *AccountController) Login() {
account := c.GetString("account") account := c.GetString("account")
password := c.GetString("password") password := c.GetString("password")
captcha := c.GetString("code") captcha := c.GetString("code")
is_remember := c.GetString("is_remember") isRemember := c.GetString("is_remember")
// 如果开启了验证码 // 如果开启了验证码
if v, ok := c.Option["ENABLED_CAPTCHA"]; ok && strings.EqualFold(v, "true") { if v, ok := c.Option["ENABLED_CAPTCHA"]; ok && strings.EqualFold(v, "true") {
@ -74,13 +68,14 @@ func (c *AccountController) Login() {
member.Update() member.Update()
c.SetMember(*member) c.SetMember(*member)
if strings.EqualFold(is_remember, "yes") { beego.Info("是否记住密码:" , isRemember)
if strings.EqualFold(isRemember, "yes") {
remember.MemberId = member.MemberId remember.MemberId = member.MemberId
remember.Account = member.Account remember.Account = member.Account
remember.Time = time.Now() remember.Time = time.Now()
v, err := utils.Encode(remember) v, err := utils.Encode(remember)
if err == nil { if err == nil {
c.SetSecureCookie(conf.GetAppKey(), "login", v) c.SetSecureCookie(conf.GetAppKey(), "login", v,time.Now().Add(time.Hour * 24 * 30).Unix())
} }
} }
u,_ := url.PathUnescape(c.GetString("url")) u,_ := url.PathUnescape(c.GetString("url"))

View File

@ -4,11 +4,14 @@ import (
"bytes" "bytes"
"encoding/json" "encoding/json"
"io"
"strings"
"time"
"github.com/astaxie/beego" "github.com/astaxie/beego"
"github.com/lifei6671/mindoc/conf" "github.com/lifei6671/mindoc/conf"
"github.com/lifei6671/mindoc/models" "github.com/lifei6671/mindoc/models"
"io" "github.com/lifei6671/mindoc/utils"
"strings"
) )
type BaseController struct { type BaseController struct {
@ -19,10 +22,16 @@ type BaseController struct {
EnableDocumentHistory bool EnableDocumentHistory bool
} }
type CookieRemember struct {
MemberId int
Account string
Time time.Time
}
// Prepare 预处理. // Prepare 预处理.
func (c *BaseController) Prepare() { func (c *BaseController) Prepare() {
c.Data["SiteName"] = "MinDoc" c.Data["SiteName"] = "MinDoc"
c.Data["Member"] = models.Member{} c.Data["Member"] = models.NewMember()
controller, action := c.GetControllerAndAction() controller, action := c.GetControllerAndAction()
c.Data["ActionName"] = action c.Data["ActionName"] = action
@ -36,6 +45,17 @@ func (c *BaseController) Prepare() {
c.Member = &member c.Member = &member
c.Data["Member"] = c.Member c.Data["Member"] = c.Member
} else { } else {
var remember CookieRemember
// //如果Cookie中存在登录信息从cookie中获取用户信息
if cookie, ok := c.GetSecureCookie(conf.GetAppKey(), "login"); ok {
if err := utils.Decode(cookie, &remember); err == nil {
if member, err := models.NewMember().Find(remember.MemberId); err == nil {
c.Member = member
c.Data["Member"] = member
c.SetMember(*member)
}
}
}
//c.Member = models.NewMember() //c.Member = models.NewMember()
//c.Member.Find(1) //c.Member.Find(1)
//c.Data["Member"] = *c.Member //c.Data["Member"] = *c.Member