github.com/insionng/yougam@v0.0.0-20170714101924-2bc18d833463/routers/SigninHandler.go (about) 1 package routers 2 3 import ( 4 "fmt" 5 "strings" 6 "time" 7 8 "github.com/insionng/yougam/helper" 9 "github.com/insionng/yougam/models" 10 11 "github.com/insionng/makross" 12 "github.com/insionng/makross/cache" 13 "github.com/insionng/makross/captcha" 14 ) 15 16 func GetSigninHandler(self *makross.Context) error { 17 18 var IsSignin bool 19 if _, okay := self.Session.Get("SignedUser").(*models.User); okay { 20 IsSignin = okay 21 } 22 23 TplNames := "signin" 24 self.Set("catpage", "SigninHandler") 25 self.Set("IsCaptcha", helper.IsCaptcha) 26 27 remember, _ := self.GetCookie("remember") 28 if IsSignin { //如果已登录 29 if next := self.Args("next").String(); len(next) > 0 { 30 return self.Redirect(next) 31 } 32 return self.Redirect("/") 33 } else { //如果未登录 34 if remember != nil { 35 if remember.Value == "true" { 36 self.Set("remember", "true") 37 } else { 38 self.Set("remember", nil) 39 } 40 } 41 42 } 43 return self.Render(TplNames) 44 } 45 46 func PostSigninHandler(self *makross.Context) error { 47 48 TplNames := "signin" 49 cpt := new(captcha.Captcha) 50 allow := false 51 if helper.IsCaptcha { 52 cpt = captcha.Store(self) 53 allow = cpt.VerifyReq(self) 54 } 55 if helper.IsCaptcha && (!allow) { 56 if len(self.Args(cpt.FieldCaptchaName).String()) > 0 { 57 self.Flash.Error("验证码错误~") 58 } else { 59 self.Flash.Error("验证码为空~") 60 } 61 return self.Render(TplNames) 62 } 63 64 cc := cache.Store(self) 65 66 //Secret := helper.MD5(self.Req.UserAgent() + helper.AesConstKey) 67 self.Set("catpage", "SigninHandler") 68 69 password := self.Args("password").String() 70 self.Set("tmppassword", password) 71 self.Set("tmpemail", self.Args("email").String()) 72 remember := self.Args("remember").String() 73 74 if len(password) == 0 { 75 self.Flash.Error("密码为空~") 76 return self.Render(TplNames) 77 } 78 79 if helper.CheckPassword(password) == false { 80 self.Flash.Error("密码含有非法字符或密码过短(至少4~30位密码)!") 81 return self.Render(TplNames) 82 } 83 84 var err error 85 var usr = new(models.User) 86 var email, username string 87 if isEmail := strings.Contains(self.Args("email").String(), "@"); isEmail { 88 email = self.Args("email").String() 89 if len(email) == 0 { 90 self.Flash.Error("EMAIL为空~") 91 goto render 92 } 93 94 if helper.CheckEmail(email) == false { 95 self.Flash.Error("Email格式不合符规格~") 96 goto render 97 } 98 99 usr, err = models.GetUserByEmail(email) 100 } else { 101 username = self.Args("email").String() 102 if len(username) == 0 { 103 self.Flash.Error("用户名称为空~") 104 goto render 105 } 106 107 if helper.CheckUsername(username) == false { 108 self.Flash.Error("用户名称格式不合符规格~") 109 goto render 110 } 111 112 usr, err = models.GetUserByUsername(username) 113 } 114 115 if (usr != nil) && (err == nil) { 116 117 if helper.ValidateHash(usr.Password, password) { 118 119 //登录成功设置session 120 self.Session.Set("SignedUserID", usr.Id) 121 self.Session.Set("SignedUserName", usr.Username) 122 self.Session.Set("SignedUser", usr) 123 124 self.Set("IsSigned", true) 125 self.Set("IsRoot", (usr.Role == -1000)) 126 self.Set("SignedUser", usr) 127 self.Set("SignedUserID", usr.Id) 128 self.Set("SignedUserName", usr.Username) 129 cc.Set(fmt.Sprintf("SignedUser:%v", usr.Id), usr, 60*60*24) 130 models.PutSignin2User(usr.Id, time.Now().Unix(), usr.SigninCount+1, self.RealIP()) 131 132 //设置cookie 133 cookie := self.NewCookie() 134 cookie.Name = "remember" 135 if remember == "true" { 136 cookie.Value = "true" 137 cookie.Expires = (time.Now().Add(time.Duration(31190400))) //361 days 138 //使用flower作本地存储时的Email别名 139 //self.SetSuperSecureCookie(Secret, "flower", usr.Email, 31190400) 140 } else { 141 cookie.Value = ("false") //取消记录 142 cookie.Expires = (time.Now().Add(time.Duration(-1))) 143 //self.SetSuperSecureCookie(Secret, "flower", "", 3600) //删除数据 144 } 145 self.SetCookie(cookie) 146 147 if next := self.Args("next").String(); next != "" { 148 return self.Redirect(next) 149 } 150 return self.Redirect("/") 151 152 } else { 153 self.Flash.Error("密码无法通过校验~") 154 goto render 155 } 156 } else { 157 self.Flash.Error("该账号不存在~") 158 goto render 159 } 160 render: 161 return self.Render(TplNames) 162 }