Login User Fixed
This commit is contained in:
parent
09abc8e3df
commit
40bce8348f
|
@ -10,6 +10,7 @@ import (
|
||||||
"golang-test/database"
|
"golang-test/database"
|
||||||
"golang-test/libs"
|
"golang-test/libs"
|
||||||
"golang-test/message"
|
"golang-test/message"
|
||||||
|
"golang-test/types"
|
||||||
"golang-test/validators"
|
"golang-test/validators"
|
||||||
"golang.org/x/crypto/bcrypt"
|
"golang.org/x/crypto/bcrypt"
|
||||||
)
|
)
|
||||||
|
@ -51,24 +52,42 @@ func RegisterUser(c *gin.Context, user database.User) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func LoginUser(c *gin.Context, email, password string) *Token {
|
func LoginUser(c *gin.Context, login types.LoginRequest) {
|
||||||
var user database.User
|
var user database.User
|
||||||
db := database.Connector()
|
db := database.Connector()
|
||||||
validate := validators.Validate
|
validate := validators.Validate
|
||||||
if err := db.Where("email = ?", email).First(&user).Error; err != nil {
|
response := message.Response{Status: 200}
|
||||||
return nil
|
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 {
|
if err := db.Where("email = ?", login.Email).First(&user).Error; err != nil {
|
||||||
return 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 {
|
func generateToken() string {
|
||||||
|
|
|
@ -15,11 +15,18 @@ type Product struct {
|
||||||
Manufacturer *Manufacturer `gorm:"foreignKey:ManufacturerID;references:ID"`
|
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 {
|
type User struct {
|
||||||
gorm.Model
|
gorm.Model
|
||||||
Name string `validate:"required"`
|
Name string `validate:"required"`
|
||||||
Email string `validate:"required"`
|
Email string `validate:"required"`
|
||||||
Password string `validate:"required"`
|
Password string `validate:"required"`
|
||||||
Products []*Product `gorm:"many2many:user_products;"`
|
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 {
|
type ManufacturerPatchRequest struct {
|
||||||
Name string `validate:"required"`
|
Name string `validate:"required"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type LoginRequest struct {
|
||||||
|
Email string `validate:"required,email"`
|
||||||
|
Password string `validate:"required"`
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue