user.go 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. package user
  2. import (
  3. "database/sql"
  4. "errors"
  5. "fmt"
  6. "github.com/gogf/gf/frame/g"
  7. "github.com/gogf/gf/net/ghttp"
  8. "github.com/gogf/gf/os/gtime"
  9. "github.com/gogf/gf/util/gvalid"
  10. )
  11. const USER_SESSION_MARK = "user_info"
  12. var (
  13. //表对象
  14. table = g.DB().Table("user").Safe()
  15. )
  16. //用户注册
  17. func SignUp(data g.MapStrStr)error{
  18. //数据校验
  19. rules:=[]string{
  20. "passport @required|length:6,16#账号不能为空|账号长度应在:min到:max之间",
  21. "password2@required|length:6,16#请输入确认密码|密码长度应当在:min到:max之间",
  22. "password @required|length:6,16|same:password2#密码不能为空|密码长度应当在:min到:max之间|两次密码输入不相等",
  23. }
  24. if err:=gvalid.CheckMap(data,rules);err!=nil{
  25. return errors.New(err.String())
  26. }
  27. if _, ok := data["nickname"]; !ok {
  28. data["nickname"] = data["passport"]
  29. }
  30. // 唯一性数据检查
  31. if !CheckPassport(data["passport"]) {
  32. return errors.New(fmt.Sprintf("账号 %s 已经存在", data["passport"]))
  33. }
  34. if !CheckNickName(data["nickname"]) {
  35. return errors.New(fmt.Sprintf("昵称 %s 已经存在", data["nickname"]))
  36. }
  37. // 记录账号创建/注册时间
  38. if _, ok := data["create_time"]; !ok {
  39. data["create_time"] = gtime.Now().String()
  40. }
  41. if _, err := table.Filter().Data(data).Save(); err != nil {
  42. return err
  43. }
  44. return nil
  45. }
  46. // 判断用户是否已经登录
  47. func IsSignedIn(session *ghttp.Session) bool {
  48. return session.Contains(USER_SESSION_MARK)
  49. }
  50. // 用户登录,成功返回用户信息,否则返回nil; passport应当会md5值字符串
  51. func SignIn(passport, password string, session *ghttp.Session) error {
  52. record, err := table.Where("passport=? and password=?", passport, password).One()
  53. if err != nil && err != sql.ErrNoRows {
  54. return err
  55. }
  56. if record == nil {
  57. return errors.New("账号或密码错误")
  58. }
  59. session.Set(USER_SESSION_MARK, record)
  60. return nil
  61. }
  62. // 用户注销
  63. func SignOut(session *ghttp.Session) {
  64. session.Remove(USER_SESSION_MARK)
  65. }
  66. // 检查账号是否符合规范(目前仅检查唯一性),存在返回false,否则true
  67. func CheckPassport(passport string) bool {
  68. if i, err := table.Where("passport", passport).Count(); err != nil && err != sql.ErrNoRows {
  69. return false
  70. } else {
  71. return i == 0
  72. }
  73. }
  74. // 检查昵称是否符合规范(目前仅检查唯一性),存在返回false,否则true
  75. func CheckNickName(nickname string) bool {
  76. if i, err := table.Where("nickname", nickname).Count(); err != nil && err != sql.ErrNoRows {
  77. return false
  78. } else {
  79. return i == 0
  80. }
  81. }