users.go 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. package controller
  2. import (
  3. "errors"
  4. "net/http"
  5. "time"
  6. "woord-core-service/model"
  7. "github.com/gin-gonic/gin"
  8. )
  9. type RegisterRequest struct {
  10. UserName string `form:"name" binding:"required"`
  11. Password string `form:"password" binding:"required"`
  12. }
  13. // 注册
  14. func Register(c *gin.Context) {
  15. var request RegisterRequest
  16. if err := c.ShouldBind(&request); err != nil {
  17. respondError(c, http.StatusBadRequest, err)
  18. return
  19. }
  20. user, err := model.CreateUser(request.UserName, request.Password)
  21. if err != nil {
  22. if errors.Is(err, model.ErrUserNameAlreadyExists) {
  23. respondError(c, http.StatusConflict, err)
  24. } else {
  25. respondUnknownError(c, err)
  26. }
  27. return
  28. }
  29. respondOK(c, user)
  30. }
  31. type LoginRequest struct {
  32. UserName string `form:"name" binding:"required"`
  33. Password string `form:"password" binding:"required"`
  34. }
  35. // 登录
  36. func Login(c *gin.Context) {
  37. var request LoginRequest
  38. if err := c.ShouldBind(&request); err != nil {
  39. respondError(c, http.StatusBadRequest, err)
  40. return
  41. }
  42. user, err := model.AuthenticateUser(request.UserName, request.Password)
  43. if err != nil {
  44. if errors.Is(err, model.ErrWrongUserNameOrPassword) {
  45. respondError(c, http.StatusUnauthorized, err)
  46. } else {
  47. respondUnknownError(c, err)
  48. }
  49. return
  50. }
  51. token, err := newToken(user.ID)
  52. if err != nil {
  53. respondUnknownError(c, err)
  54. return
  55. }
  56. c.SetCookie(AuthTokenKey, token, int(720*time.Hour), "/", "regmsif.cf", true, true)
  57. respondOK(c, user)
  58. }
  59. // 获取当前用户
  60. func GetCurrentUser(c *gin.Context) {
  61. user, err := model.GetUser(c.MustGet(AuthUserKey).(uint))
  62. if err != nil {
  63. if errors.Is(err, model.ErrUserNotFound) {
  64. respondError(c, http.StatusNotFound, err)
  65. } else {
  66. respondUnknownError(c, err)
  67. }
  68. return
  69. }
  70. respondOK(c, user)
  71. }