/
login.go
85 lines (73 loc) · 2.15 KB
/
login.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
package user
import (
"github.com/1024casts/snake/internal/ecode"
"github.com/1024casts/snake/pkg/app"
"github.com/gin-gonic/gin"
"github.com/1024casts/snake/internal/model"
"github.com/1024casts/snake/internal/service"
"github.com/1024casts/snake/pkg/errcode"
"github.com/1024casts/snake/pkg/log"
)
// Login 邮箱登录
// @Summary 用户登录接口
// @Description 仅限邮箱登录
// @Tags 用户
// @Produce json
// @Param req body LoginCredentials true "请求参数"
// @Success 200 {object} model.UserInfo "用户信息"
// @Router /login [post]
func Login(c *gin.Context) {
// Binding the data with the u struct.
var req LoginCredentials
valid, errs := app.BindAndValid(c, &req)
if !valid {
log.Warnf("app.BindAndValid errs: %v", errs)
response.Error(c, errcode.ErrInvalidParam.WithDetails(errs.Errors()...))
return
}
log.Infof("login req %#v", req)
t, err := service.UserSvc.EmailLogin(c, req.Email, req.Password)
if err != nil {
log.Warnf("email login err: %v", err)
response.Error(c, ecode.ErrEmailOrPassword)
return
}
response.Success(c, model.Token{Token: t})
}
// PhoneLogin 手机登录接口
// @Summary 用户登录接口
// @Description 仅限手机登录
// @Tags 用户
// @Produce json
// @Param req body PhoneLoginCredentials true "phone"
// @Success 200 {object} model.UserInfo "用户信息"
// @Router /users/login [post]
func PhoneLogin(c *gin.Context) {
log.Info("Phone Login function called.")
// Binding the data with the u struct.
var req PhoneLoginCredentials
if err := c.Bind(&req); err != nil {
log.Warnf("phone login bind param err: %v", err)
response.Error(c, errcode.ErrBind)
return
}
log.Infof("req %#v", req)
// check param
if req.Phone == 0 || req.VerifyCode == 0 {
log.Warn("phone login bind param is empty")
response.Error(c, errcode.ErrInvalidParam)
return
}
// 验证校验码
if !service.UserSvc.CheckLoginVCode(req.Phone, req.VerifyCode) {
response.Error(c, ecode.ErrVerifyCode)
return
}
// 登录
t, err := service.UserSvc.PhoneLogin(c, req.Phone, req.VerifyCode)
if err != nil {
response.Error(c, ecode.ErrVerifyCode)
return
}
response.Success(c, model.Token{Token: t})
}