After Finish User Register and Login Service via MVC arch
This commit is contained in:
102
controllers/auth_controller.go
Normal file
102
controllers/auth_controller.go
Normal file
@@ -0,0 +1,102 @@
|
||||
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,
|
||||
})
|
||||
}
|
||||
Reference in New Issue
Block a user