auth

package
v0.4.8 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Nov 19, 2019 License: LGPL-3.0 Imports: 5 Imported by: 0

Documentation

Index

Examples

Constants

This section is empty.

Variables

View Source
var (
	JWTTimeout = time.Minute * 5
	JWTSecret  = func(userID string) (secret []byte, err error) {
		return []byte("secret"), nil
	}
	JWTRefreshTimeout = time.Hour * 24 * 7
)

Functions

func CheckToken

func CheckToken(token string) (userID string, err error)

CheckToken accept a jwt token and returns the uid in token.

func ParseToken

func ParseToken(token string) (*jwt.Token, error)

ParseToken parse a token string.

func RefreshToken

func RefreshToken(token string) (newToken string, err error)

RefreshToken accepts a valid token and returns a new token with new expire time.

func Sign

func Sign(userID string) (token string, err error)

Sign returns a signed jwt string.

Example
auth.JWTTimeout = 4 * time.Second
auth.JWTSecret = func(userID string) (secret []byte, err error) {
	return []byte("hello world"), nil
}
auth.JWTRefreshTimeout = 5 * time.Second
token, _ := auth.Sign("user")
ctx := &box.Ctx{
	Request: &restful.Request{
		Request: &http.Request{
			Header: map[string][]string{
				"Authorization": {token},
			},
		},
	},
}
u1, err := ctx.IsLogin()
if err != nil {
	panic(err)
}
fmt.Println(u1)
u2, err := auth.CheckToken(token)
if err != nil {
	panic(err)
}
fmt.Println(u2)
time.Sleep(time.Second * 2)
newToken, err := auth.RefreshToken(token)
if err != nil {
	panic(err)
}
_, err = auth.CheckToken(newToken)
if err != nil {
	panic(err)
}

time.Sleep(time.Second * 3)
// token is expired, newToken is still valid
_, err = ctx.IsLogin()
fmt.Println(err != nil)
_, err = auth.CheckToken(token)
fmt.Println(err != nil)
_, err = auth.CheckToken(newToken)
if err != nil {
	panic(err)
}
time.Sleep(time.Second)
// cant refresh token if refresh timeout is reached
_, err = auth.RefreshToken(newToken)
fmt.Println(err != nil)

ctx2 := &box.Ctx{
	Request: &restful.Request{
		Request: &http.Request{
			Header: map[string][]string{
				"Authorization": {"wtf"},
			},
		},
	},
}
_, err = ctx2.IsLogin()
fmt.Println(err != nil)
Output:

user
user
true
true
true
true

Types

This section is empty.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL