Skip to content

Gin web frameword's basic authorization middleware.Support Custom User Model Based on ORM Framework Gorm.

Notifications You must be signed in to change notification settings

wangyushun/gin-basicauth

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 

Repository files navigation

gin-basicauth

Gin web frameword's basic authorization middleware.Support Custom User Model Based on ORM Framework Gorm.

Usage

See the source code for specific usage.

define user model

The user model must define the methods of interface type IBasicAuth.

// IBasicAuth basic auth interface
type IBasicAuth interface {
	IsActived() bool
	CheckPassword(string) bool
	UsernameColumnName() string
}

// UserProfile model
type UserProfile struct {
	ID          uint      `gorm:"primary_key" json:"id"`
	Username    string    `gorm:"type:varchar(150);unique_index:uidx_name" json:"username,omitempty"`
	Password    string    `gorm:"type:varchar(128);default:'666'"`
	IsSuperUser bool      `gorm:"column:is_superuser;default:false"  json:"-"`
	IsStuff     bool      `gorm:"column:is_stuff;default:false"  json:"-"`
	IsActive    bool      `gorm:"column:is_active;default:false"  json:"-"`
	FirstName   string    `gorm:"column:first_name;type:varchar(30)" json:"first_name,omitempty"`
	LastName    string    `gorm:"column:last_name;type:varchar(150)" json:"last_name,omitempty"`
	Email       string    `gorm:"type:varchar(254)"`
	DateJoined  time.Time `gorm:"column:date_joined"  json:"-"`
	LastLogin   time.Time `gorm:"column:last_login"  json:"-"`
}

// TableName Set UserProfile's table name
func (UserProfile) TableName() string {
	return "users_userprofile"
}

// IsActived return true if user is active,otherwise false
func (u UserProfile) IsActived() bool {

	return u.IsActive
}

// CheckPassword Check whether the user's password is the same as the given password
func (u UserProfile) CheckPassword(pw string) bool {

	return u.Password == pw
}

// UsernameColumnName Return the table field name corresponding to the username field
func (u UserProfile) UsernameColumnName() string {

	return "username"
}

Use in Gin

import "gin-basicauth/basicauth"

app := gin.Default()
 //input *gorm.DB and user model
app.Use(basicauth.BasicAuth(db, &UserProfile{}))

In Gin Conatroller

func getUserHandler(ctx *gin.Context) {

	user, exists := ctx.Get(basicauth.AuthUserKey) 
	if !exists {
		ctx.JSON(401, "user not authenticated")
		return
	}
	u, ok := user.(*UserProfile)//important
	if ok {
		ctx.JSON(200, u)
		return
	}
	ctx.JSON(401, "user not authenticated")
}

About

Gin web frameword's basic authorization middleware.Support Custom User Model Based on ORM Framework Gorm.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages