103 lines
1.9 KiB
Go
103 lines
1.9 KiB
Go
package controllers
|
|
|
|
import (
|
|
"GinTutorial/global"
|
|
"GinTutorial/models"
|
|
"GinTutorial/utils"
|
|
"net/http"
|
|
"strconv"
|
|
|
|
"github.com/gin-gonic/gin"
|
|
)
|
|
|
|
func Register(ctx *gin.Context) {
|
|
var user models.User
|
|
|
|
if err := ctx.ShouldBindJSON(&user); err != nil {
|
|
ctx.JSON(http.StatusBadRequest, gin.H{
|
|
"error": err.Error(),
|
|
})
|
|
return
|
|
}
|
|
|
|
hashPassword, err := utils.HashPassword(user.Password)
|
|
|
|
if err != nil {
|
|
ctx.JSON(http.StatusInternalServerError, gin.H{
|
|
"error": err.Error(),
|
|
})
|
|
}
|
|
|
|
user.Password = hashPassword
|
|
|
|
if err := global.Db.AutoMigrate(&user); err != nil {
|
|
ctx.JSON(http.StatusInternalServerError, gin.H{
|
|
"error": err.Error(),
|
|
})
|
|
return
|
|
}
|
|
|
|
if err := global.Db.Create(&user).Error; err != nil {
|
|
ctx.JSON(http.StatusInternalServerError, gin.H{
|
|
"error": err.Error(),
|
|
})
|
|
return
|
|
}
|
|
|
|
token, err := utils.GenerateJWT(strconv.Itoa(int(user.ID)))
|
|
|
|
if err != nil {
|
|
ctx.JSON(http.StatusInternalServerError, gin.H{
|
|
"error": err.Error(),
|
|
})
|
|
return
|
|
}
|
|
|
|
ctx.JSON(http.StatusOK, gin.H{
|
|
"token": token,
|
|
})
|
|
}
|
|
|
|
func Login(ctx *gin.Context) {
|
|
var InputUser struct {
|
|
Username string `json:"username" binding:"required"`
|
|
Password string `json:"password" binding:"required"`
|
|
}
|
|
|
|
if err := ctx.ShouldBindJSON(&InputUser); err != nil {
|
|
ctx.JSON(http.StatusBadRequest, gin.H{
|
|
"error": err.Error(),
|
|
})
|
|
return
|
|
}
|
|
|
|
var user models.User
|
|
|
|
if err := global.Db.Where("username = ?", InputUser.Username).First(&user).Error; err != nil {
|
|
ctx.JSON(http.StatusUnauthorized, gin.H{
|
|
"error": "Invalid username or password",
|
|
})
|
|
return
|
|
}
|
|
|
|
if !utils.CheckPassword(InputUser.Password, user.Password) {
|
|
ctx.JSON(http.StatusUnauthorized, gin.H{
|
|
"error": "Invalid username or password",
|
|
})
|
|
return
|
|
}
|
|
|
|
token, err := utils.GenerateJWT(strconv.Itoa(int(user.ID)))
|
|
|
|
if err != nil {
|
|
ctx.JSON(http.StatusInternalServerError, gin.H{
|
|
"error": err.Error(),
|
|
})
|
|
return
|
|
}
|
|
|
|
ctx.JSON(http.StatusOK, gin.H{
|
|
"token": token,
|
|
})
|
|
}
|