Files
cloudreve/service/user/login.go

62 lines
1.7 KiB
Go
Raw Normal View History

2019-11-11 19:13:17 +08:00
package user
import (
"cloudreve/models"
"cloudreve/pkg/serializer"
2019-11-12 16:18:58 +08:00
"cloudreve/pkg/util"
2019-11-13 16:28:14 +08:00
"fmt"
2019-11-11 19:13:17 +08:00
"github.com/gin-gonic/gin"
2019-11-13 17:03:55 +08:00
"github.com/mojocn/base64Captcha"
2019-11-11 19:13:17 +08:00
)
// UserLoginService 管理用户登录的服务
type UserLoginService struct {
//TODO 细致调整验证规则
UserName string `form:"userName" json:"userName" binding:"required,email"`
Password string `form:"Password" json:"Password" binding:"required,min=4,max=64"`
CaptchaCode string `form:"captchaCode" json:"captchaCode"`
}
// Login 用户登录函数
func (service *UserLoginService) Login(c *gin.Context) serializer.Response {
isCaptchaRequired := model.GetSettingByName("login_captcha")
expectedUser, err := model.GetUserByEmail(service.UserName)
if model.IsTrueVal(isCaptchaRequired) {
// TODO 验证码校验
2019-11-13 17:03:55 +08:00
captchaID := util.GetSession(c, "captchaID")
if captchaID == nil || !base64Captcha.VerifyCaptcha(captchaID.(string), service.CaptchaCode) {
util.DeleteSession(c, "captchaID")
return serializer.ParamErr("验证码错误", nil)
}
2019-11-11 19:13:17 +08:00
}
// 一系列校验
if err != nil {
return serializer.Err(401, "用户邮箱或密码错误", err)
}
if authOK, _ := expectedUser.CheckPassword(service.Password); !authOK {
return serializer.Err(401, "用户邮箱或密码错误", nil)
}
if expectedUser.Status == model.Baned {
return serializer.Err(403, "该账号已被封禁", nil)
}
if expectedUser.Status == model.NotActivicated {
return serializer.Err(403, "该账号未激活", nil)
}
if expectedUser.TwoFactor != "" {
//TODO 二步验证处理
}
//登陆成功清空并设置session
2019-11-12 16:18:58 +08:00
util.SetSession(c, map[string]interface{}{
2019-11-11 19:13:17 +08:00
"user_id": expectedUser.ID,
})
2019-11-13 16:28:14 +08:00
fmt.Println(expectedUser)
2019-11-12 15:34:54 +08:00
return serializer.BuildUserResponse(expectedUser)
2019-11-11 19:13:17 +08:00
}