Login User Fixed

This commit is contained in:
Владимир Шалимов 2024-06-06 21:02:59 +05:00
parent 09abc8e3df
commit 40bce8348f
3 changed files with 43 additions and 12 deletions

View File

@ -10,6 +10,7 @@ import (
"golang-test/database"
"golang-test/libs"
"golang-test/message"
"golang-test/types"
"golang-test/validators"
"golang.org/x/crypto/bcrypt"
)
@ -51,24 +52,42 @@ func RegisterUser(c *gin.Context, user database.User) {
return
}
func LoginUser(c *gin.Context, email, password string) *Token {
func LoginUser(c *gin.Context, login types.LoginRequest) {
var user database.User
db := database.Connector()
validate := validators.Validate
if err := db.Where("email = ?", email).First(&user).Error; err != nil {
return nil
response := message.Response{Status: 200}
var token *database.Token
if err := validate.Struct(login); err != nil {
response.Error = libs.GetValidationErrors(err.(validator.ValidationErrors))
response.Status = 400
message.SendResponse(c, response)
return
}
if err := bcrypt.CompareHashAndPassword([]byte(user.Password), []byte(password)); err != nil {
return nil
if err := db.Where("email = ?", login.Email).First(&user).Error; err != nil {
response.Status = 404
response.Error = gin.H{
"error": "User not found",
}
token := &Token{
UserID: user.ID,
Token: generateToken(),
}
if err := db.Create(token).Error; err != nil {
return nil
if err := bcrypt.CompareHashAndPassword([]byte(user.Password), []byte(login.Password)); err != nil {
response.Status = 404
response.Error = gin.H{
"error": "User not found",
}
return token
}
token.Token = generateToken()
token.UserID = user.ID
user.Tokens = append(user.Tokens, token)
response.Message = gin.H{
"message": "Login Success",
}
message.SendResponse(c, response)
}
func generateToken() string {

View File

@ -15,11 +15,18 @@ type Product struct {
Manufacturer *Manufacturer `gorm:"foreignKey:ManufacturerID;references:ID"`
}
type Token struct {
gorm.Model
UserID uint
Token string
User *User `gorm:"foreignKey:UserID;references:ID"`
}
type User struct {
gorm.Model
Name string `validate:"required"`
Email string `validate:"required"`
Password string `validate:"required"`
Products []*Product `gorm:"many2many:user_products;"`
Token string `gorm:"many2many:user_token;"`
Tokens []*Token `gorm:"many2many:user_token;"`
}

View File

@ -3,3 +3,8 @@ package types
type ManufacturerPatchRequest struct {
Name string `validate:"required"`
}
type LoginRequest struct {
Email string `validate:"required,email"`
Password string `validate:"required"`
}