busniess-user-center/internal/service/user/util.go

92 lines
2.7 KiB
Go

package user
import (
"busniess-user-center/internal/models"
"busniess-user-center/internal/repo"
"context"
"fmt"
"time"
"github.com/dgrijalva/jwt-go"
"github.com/gin-gonic/gin"
"github.com/golang-module/dongle"
)
func creteLoginTokenClaims(user *repo.User, expire int) jwt.MapClaims {
now := time.Now()
expiredAt := now.Unix() + int64(expire)
userTokenClaims := jwt.MapClaims{
"id": user.ID,
"account": user.Account,
"exp": expiredAt,
"_flag": now,
}
return userTokenClaims
}
func (u *userService) sha256(pwd string, salt string) string {
fromStr := fmt.Sprintf("%s:%s", pwd, salt)
return dongle.Encrypt.FromString(fromStr).BySha256().ToHexString()
}
func (u *userService) getToken(claims jwt.MapClaims) (string, error) {
token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims)
tokenStr, err := token.SignedString([]byte(u.conf.Jwt.Secret))
return tokenStr, err
}
func (u *userService) setLoginStatus(ctx context.Context, user repo.User, claims jwt.MapClaims) error {
tokenStr, err := u.getToken(claims)
if err != nil {
return err
}
// 只做简单的token记录,校验时如果没有从reids获取到登陆信息,返回失败
err = u.tokenRefresher.SetUseridTokenRelation(user.ID, tokenStr)
if err != nil {
return fmt.Errorf("设置redis失败:%s", err.Error())
}
if c, ok := ctx.(*gin.Context); ok {
expires := u.conf.Jwt.Expires
domain := u.conf.App.Host
c.Writer.Header().Add("Set-Cookie", fmt.Sprintf("%s=%s; Max-Age=%d; Path=/;Domain=%s", COOKIE_KEY_TOKEN, tokenStr, expires, domain))
c.Writer.Header().Add("Set-Cookie", fmt.Sprintf("%s=%s; Max-Age=%d; Path=/;Domain=%s", COOKIE_KEY_ACCOUNT, claims["account"], expires, domain))
c.Writer.Header().Add("Set-Cookie", fmt.Sprintf("%s=%s; Max-Age=%d; Path=/;Domain=%s", COOKIE_KEY_ID, claims["id"], expires, domain))
}
return nil
}
func (u *userService) removeCookie(ctx context.Context) {
if c, ok := ctx.(*gin.Context); ok {
domain := u.conf.App.Host
c.Writer.Header().Add("Set-Cookie", fmt.Sprintf("%s=; Max-Age=0; Path=/;Domain=%s", COOKIE_KEY_TOKEN, domain))
c.Writer.Header().Add("Set-Cookie", fmt.Sprintf("%s=; Max-Age=0; Path=/;Domain=%s", COOKIE_KEY_ACCOUNT, domain))
c.Writer.Header().Add("Set-Cookie", fmt.Sprintf("%s=; Max-Age=0; Path=/;Domain=%s", COOKIE_KEY_ID, domain))
}
}
func convertUserList(users []repo.User) []models.User {
list := make([]models.User, len(users))
for _, item := range users {
list = append(list, convertUser(item))
}
return list
}
func convertUser(user repo.User) models.User {
return models.User{
Id: user.ID,
UserInfo: models.UserInfo{
Name: user.Name,
Account: user.Account,
Mobile: user.Mobile,
Email: user.Email,
Sex: user.Sex,
},
}
}