添加阿里云短信服务支持
This commit is contained in:
@@ -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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user