generate jwt
This commit is contained in:
@@ -1,23 +1,48 @@
|
||||
package controller
|
||||
|
||||
import (
|
||||
"atom/modules/auth/dto"
|
||||
"atom/modules/auth/service"
|
||||
"atom/providers/config"
|
||||
"atom/providers/jwt"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
)
|
||||
|
||||
type UserController interface {
|
||||
GetName(*gin.Context) (string, error)
|
||||
Login(*gin.Context, dto.LoginRequestForm) (*dto.LoginResponse, error)
|
||||
}
|
||||
|
||||
type userControllerImpl struct {
|
||||
conf *config.Config
|
||||
user service.UserService
|
||||
jwt *jwt.JWT
|
||||
}
|
||||
|
||||
func NewUserController(conf *config.Config) UserController {
|
||||
return &userControllerImpl{conf: conf}
|
||||
func NewUserController(
|
||||
conf *config.Config,
|
||||
user service.UserService,
|
||||
jwt *jwt.JWT,
|
||||
) UserController {
|
||||
return &userControllerImpl{
|
||||
conf: conf,
|
||||
user: user,
|
||||
jwt: jwt,
|
||||
}
|
||||
}
|
||||
|
||||
func (c *userControllerImpl) GetName(ctx *gin.Context) (string, error) {
|
||||
return "User",nil
|
||||
func (c *userControllerImpl) Login(ctx *gin.Context, req dto.LoginRequestForm) (*dto.LoginResponse, error) {
|
||||
user, err := c.user.AuthMatchPassword(ctx, &req)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
token, err := c.user.GenerateJWTTokenFromUser(ctx, user)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return &dto.LoginResponse{
|
||||
Token: token,
|
||||
}, nil
|
||||
}
|
||||
|
||||
10
modules/auth/dto/user.go
Normal file
10
modules/auth/dto/user.go
Normal file
@@ -0,0 +1,10 @@
|
||||
package dto
|
||||
|
||||
type LoginRequestForm struct {
|
||||
Username string `json:"username,omitempty"`
|
||||
Password string `json:"password,omitempty"`
|
||||
}
|
||||
|
||||
type LoginResponse struct {
|
||||
Token string `json:"token,omitempty"`
|
||||
}
|
||||
@@ -13,6 +13,7 @@ import (
|
||||
|
||||
type Route struct {
|
||||
svc *http.Service
|
||||
user controller.UserController
|
||||
role controller.RoleController
|
||||
permission controller.PermissionController
|
||||
}
|
||||
@@ -20,11 +21,13 @@ type Route struct {
|
||||
func NewRoute(
|
||||
svc *http.Service,
|
||||
role controller.RoleController,
|
||||
user controller.UserController,
|
||||
permission controller.PermissionController,
|
||||
) contracts.Route {
|
||||
return &Route{
|
||||
svc: svc,
|
||||
role: role,
|
||||
user: user,
|
||||
permission: permission,
|
||||
}
|
||||
}
|
||||
@@ -32,6 +35,12 @@ func NewRoute(
|
||||
func (r *Route) Register() {
|
||||
group := r.svc.Engine.Group("auth")
|
||||
{
|
||||
// common functions
|
||||
group.GET("/login", gen.DataFunc1(
|
||||
r.user.Login,
|
||||
gen.BindBody(dto.LoginRequestForm{}, err.BindBodyFailed),
|
||||
))
|
||||
|
||||
roleGroup := group.Group("roles")
|
||||
{
|
||||
roleGroup.GET("", gen.DataFunc2(
|
||||
|
||||
@@ -1,26 +1,34 @@
|
||||
package service
|
||||
|
||||
import (
|
||||
"atom/database/models"
|
||||
"atom/modules/auth/dao"
|
||||
"atom/modules/auth/dto"
|
||||
"atom/providers/jwt"
|
||||
"context"
|
||||
)
|
||||
|
||||
type UserService interface {
|
||||
AttachRole(context.Context, int, int) error
|
||||
AuthMatchPassword(context.Context, *dto.LoginRequestForm) (*models.User, error)
|
||||
GenerateJWTTokenFromUser(context.Context, *models.User) (string, error)
|
||||
}
|
||||
|
||||
type userService struct {
|
||||
userRoleDao dao.UserRoleDao
|
||||
userDao dao.UserDao
|
||||
jwt *jwt.JWT
|
||||
}
|
||||
|
||||
func NewUserService(
|
||||
userRoleDao dao.UserRoleDao,
|
||||
userDao dao.UserDao,
|
||||
jwt *jwt.JWT,
|
||||
) UserService {
|
||||
return &userService{
|
||||
userRoleDao: userRoleDao,
|
||||
userDao: userDao,
|
||||
jwt: jwt,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -37,3 +45,24 @@ func (svc *userService) DetachRole(ctx context.Context, userID, roleID int) erro
|
||||
}
|
||||
return svc.userRoleDao.Delete(ctx, userID, roleID)
|
||||
}
|
||||
func (svc *userService) AuthMatchPassword(ctx context.Context, req *dto.LoginRequestForm) (*models.User, error) {
|
||||
return &models.User{
|
||||
ID: 10,
|
||||
UUID: "1",
|
||||
Username: "2",
|
||||
Password: "3",
|
||||
Nickname: "4",
|
||||
Avatar: "5",
|
||||
RoleID: 66,
|
||||
}, nil
|
||||
}
|
||||
|
||||
func (svc *userService) GenerateJWTTokenFromUser(ctx context.Context, user *models.User) (string, error) {
|
||||
return svc.jwt.CreateToken(svc.jwt.CreateClaims(jwt.BaseClaims{
|
||||
UUID: user.UUID,
|
||||
UserID: user.ID,
|
||||
Username: user.Username,
|
||||
NickName: user.Nickname,
|
||||
RoleID: user.RoleID,
|
||||
}))
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user