feat: login with apple
This commit is contained in:
@@ -17,13 +17,13 @@ func Router() *gin.Engine {
|
||||
|
||||
userRouter := v1.Group("/user")
|
||||
{
|
||||
userRouter.POST("/create", middleware.ValidateAppleAppToken(), common.Wrapper(user.CreateUser))
|
||||
userRouter.GET("/info", middleware.ValidateAppleAppToken(), common.Wrapper(user.GetUserInfo))
|
||||
userRouter.POST("/login-with-apple", middleware.ValidateAppleAppLoginCode(), common.Wrapper(user.LoginWithApple))
|
||||
userRouter.GET("/info", middleware.ValidateToken(), common.Wrapper(user.GetUserInfo))
|
||||
}
|
||||
|
||||
if config.IsDebug() {
|
||||
// for debug
|
||||
v1.GET("/ping", middleware.ValidateAppleAppToken(), func(ctx *gin.Context) { ctx.JSON(200, gin.H{"message": "pong"}) })
|
||||
v1.GET("/ping", middleware.ValidateToken(), func(ctx *gin.Context) { ctx.JSON(200, gin.H{"message": "pong"}) })
|
||||
}
|
||||
return r
|
||||
}
|
||||
|
||||
@@ -2,23 +2,67 @@ package user
|
||||
|
||||
import (
|
||||
"context"
|
||||
"time"
|
||||
|
||||
"github.com/nose7en/ToyBoomServer/common"
|
||||
"github.com/nose7en/ToyBoomServer/config"
|
||||
"github.com/nose7en/ToyBoomServer/dao"
|
||||
"github.com/nose7en/ToyBoomServer/defs"
|
||||
"github.com/nose7en/ToyBoomServer/models"
|
||||
"github.com/nose7en/ToyBoomServer/utils"
|
||||
)
|
||||
|
||||
func CreateUser(c context.Context, req *defs.CommonRequest) (*defs.CommonResponse, error) {
|
||||
func LoginWithApple(c context.Context, req *defs.CommonRequest) (*defs.GetUserAuthTokenResponse, error) {
|
||||
userInfo := common.GetUser(c)
|
||||
newUser := &models.User{}
|
||||
newUser.FillWithUserInfo(userInfo)
|
||||
|
||||
if err := dao.NewMutation().CreateUser(newUser); err != nil {
|
||||
if userInfo.GetUserID() > 0 {
|
||||
userInfo, err := dao.NewQuery().GetUserByID(userInfo.GetUserID())
|
||||
if err != nil {
|
||||
common.Logger(c).WithError(err).Errorf("failed to get user info")
|
||||
return nil, err
|
||||
}
|
||||
|
||||
newUserToken, err := newUserToken(userInfo)
|
||||
if err != nil {
|
||||
common.Logger(c).WithError(err).Errorf("failed to new user token")
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return &defs.GetUserAuthTokenResponse{
|
||||
Status: &defs.Status{Code: defs.RespCode_SUCCESS, Message: "user exists"},
|
||||
Token: newUserToken,
|
||||
}, nil
|
||||
}
|
||||
|
||||
newUser, err := dao.NewMutation().FirstOrCreateUser(userInfo)
|
||||
if err != nil {
|
||||
common.Logger(c).WithError(err).Errorf("failed to create user")
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return &defs.CommonResponse{
|
||||
newUserToken, err := newUserToken(newUser)
|
||||
if err != nil {
|
||||
common.Logger(c).WithError(err).Errorf("failed to new user token")
|
||||
return nil, err
|
||||
}
|
||||
|
||||
common.Logger(c).Infof("create user success, user info record is %+v", newUser)
|
||||
return &defs.GetUserAuthTokenResponse{
|
||||
Status: &defs.Status{Code: defs.RespCode_SUCCESS, Message: defs.RespMessage_SUCCESS},
|
||||
Token: newUserToken,
|
||||
}, nil
|
||||
}
|
||||
|
||||
func newUserToken(userInfo defs.UserGettable) (string, error) {
|
||||
token, err := utils.GetJwtTokenFromMap(
|
||||
config.GetSettings().JWTConfig.Secret,
|
||||
time.Now().Unix(),
|
||||
config.GetSettings().JWTConfig.ExpireSec,
|
||||
userInfo.ToMap(),
|
||||
)
|
||||
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
||||
return token, nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user