Login User Fixed
This commit is contained in:
parent
09abc8e3df
commit
40bce8348f
|
@ -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 := bcrypt.CompareHashAndPassword([]byte(user.Password), []byte(login.Password)); err != nil {
|
||||
response.Status = 404
|
||||
response.Error = gin.H{
|
||||
"error": "User not found",
|
||||
}
|
||||
}
|
||||
if err := db.Create(token).Error; err != nil {
|
||||
return nil
|
||||
|
||||
token.Token = generateToken()
|
||||
token.UserID = user.ID
|
||||
user.Tokens = append(user.Tokens, token)
|
||||
|
||||
response.Message = gin.H{
|
||||
"message": "Login Success",
|
||||
}
|
||||
return token
|
||||
|
||||
message.SendResponse(c, response)
|
||||
}
|
||||
|
||||
func generateToken() string {
|
||||
|
|
|
@ -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;"`
|
||||
}
|
||||
|
|
|
@ -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"`
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue