添加阿里云短信服务支持

This commit is contained in:
2025-04-18 17:47:54 +08:00
parent a7e59fb1d7
commit 999d0b0a1d
8 changed files with 234 additions and 27 deletions

View File

@@ -2,9 +2,10 @@ package handlers
import (
"errors"
"platform/web/models"
"platform/web/auth"
m "platform/web/models"
q "platform/web/queries"
"platform/web/services"
s "platform/web/services"
"time"
"github.com/gofiber/fiber/v2"
@@ -18,11 +19,11 @@ type LoginReq struct {
}
type LoginResp struct {
AccessToken string `json:"access_token"`
RefreshToken string `json:"refresh_token"`
Expires int64 `json:"expires"`
Auth services.AuthContext `json:"auth"`
Profile *models.User `json:"profile"`
AccessToken string `json:"access_token"`
RefreshToken string `json:"refresh_token"`
Expires int64 `json:"expires"`
Auth s.AuthContext `json:"auth"`
Profile *m.User `json:"profile"`
}
func Login(c *fiber.Ctx) error {
@@ -45,16 +46,16 @@ func Login(c *fiber.Ctx) error {
func loginByPhone(c *fiber.Ctx, req *LoginReq) error {
// 验证验证码
err := services.Verifier.VerifySms(c.Context(), req.Username, req.Password)
err := s.Verifier.VerifySms(c.Context(), req.Username, req.Password)
if err != nil {
if errors.Is(err, services.ErrVerifierServiceInvalid) {
if errors.Is(err, s.ErrVerifierServiceInvalid) {
return fiber.NewError(fiber.StatusBadRequest, "验证码错误")
}
return err
}
// 查找用户 todo 获取权限信息
var user *models.User
var user *m.User
err = q.Q.Transaction(func(tx *q.Query) error {
user, err = tx.User.
Where(tx.User.Phone.Eq(req.Username)).
@@ -65,7 +66,7 @@ func loginByPhone(c *fiber.Ctx, req *LoginReq) error {
// 如果用户不存在,初始化用户 todo 保存默认权限信息
if user == nil {
user = &models.User{
user = &m.User{
Phone: req.Username,
Username: req.Username,
}
@@ -86,13 +87,13 @@ func loginByPhone(c *fiber.Ctx, req *LoginReq) error {
}
// 保存到会话
auth := services.AuthContext{
auth := s.AuthContext{
Permissions: map[string]struct{}{
"user": {},
},
Payload: services.Payload{
Payload: s.Payload{
Id: user.ID,
Type: services.PayloadUser,
Type: s.PayloadUser,
Name: user.Name,
Avatar: user.Avatar,
},
@@ -101,7 +102,7 @@ func loginByPhone(c *fiber.Ctx, req *LoginReq) error {
if req.Remember {
duration *= 7
}
token, err := services.Session.Create(c.Context(), auth)
token, err := s.Session.Create(c.Context(), auth)
if err != nil {
return err
}
@@ -115,3 +116,30 @@ func loginByPhone(c *fiber.Ctx, req *LoginReq) error {
Profile: user,
})
}
type LogoutReq struct {
AccessToken string `json:"access_token"`
RefreshToken string `json:"refresh_token"`
}
func Logout(c *fiber.Ctx) error {
_, err := auth.Protect(c, []s.PayloadType{s.PayloadUser}, []string{})
if err != nil {
// 用户未登录
return nil
}
// 解析请求参数
req := new(LogoutReq)
if err := c.BodyParser(req); err != nil {
return err
}
// 删除会话
err = s.Session.Remove(c.Context(), req.AccessToken, req.RefreshToken)
if err != nil {
return err
}
return nil
}