| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 |
- package user
- import (
- "database/sql"
- "errors"
- "fmt"
- "github.com/gogf/gf/frame/g"
- "github.com/gogf/gf/net/ghttp"
- "github.com/gogf/gf/os/gtime"
- "github.com/gogf/gf/util/gvalid"
- )
- const USER_SESSION_MARK = "user_info"
- var (
- //表对象
- table = g.DB().Table("user").Safe()
- )
- //用户注册
- func SignUp(data g.MapStrStr)error{
- //数据校验
- rules:=[]string{
- "passport @required|length:6,16#账号不能为空|账号长度应在:min到:max之间",
- "password2@required|length:6,16#请输入确认密码|密码长度应当在:min到:max之间",
- "password @required|length:6,16|same:password2#密码不能为空|密码长度应当在:min到:max之间|两次密码输入不相等",
- }
- if err:=gvalid.CheckMap(data,rules);err!=nil{
- return errors.New(err.String())
- }
- if _, ok := data["nickname"]; !ok {
- data["nickname"] = data["passport"]
- }
- // 唯一性数据检查
- if !CheckPassport(data["passport"]) {
- return errors.New(fmt.Sprintf("账号 %s 已经存在", data["passport"]))
- }
- if !CheckNickName(data["nickname"]) {
- return errors.New(fmt.Sprintf("昵称 %s 已经存在", data["nickname"]))
- }
- // 记录账号创建/注册时间
- if _, ok := data["create_time"]; !ok {
- data["create_time"] = gtime.Now().String()
- }
- if _, err := table.Filter().Data(data).Save(); err != nil {
- return err
- }
- return nil
- }
- // 判断用户是否已经登录
- func IsSignedIn(session *ghttp.Session) bool {
- return session.Contains(USER_SESSION_MARK)
- }
- // 用户登录,成功返回用户信息,否则返回nil; passport应当会md5值字符串
- func SignIn(passport, password string, session *ghttp.Session) error {
- record, err := table.Where("passport=? and password=?", passport, password).One()
- if err != nil && err != sql.ErrNoRows {
- return err
- }
- if record == nil {
- return errors.New("账号或密码错误")
- }
- session.Set(USER_SESSION_MARK, record)
- return nil
- }
- // 用户注销
- func SignOut(session *ghttp.Session) {
- session.Remove(USER_SESSION_MARK)
- }
- // 检查账号是否符合规范(目前仅检查唯一性),存在返回false,否则true
- func CheckPassport(passport string) bool {
- if i, err := table.Where("passport", passport).Count(); err != nil && err != sql.ErrNoRows {
- return false
- } else {
- return i == 0
- }
- }
- // 检查昵称是否符合规范(目前仅检查唯一性),存在返回false,否则true
- func CheckNickName(nickname string) bool {
- if i, err := table.Where("nickname", nickname).Count(); err != nil && err != sql.ErrNoRows {
- return false
- } else {
- return i == 0
- }
- }
|