feat: add usage example

This commit is contained in:
weloe
2023-05-06 23:37:13 +08:00
parent 25f85c7114
commit e831ad6bf6
4 changed files with 171 additions and 2 deletions

105
Readme.md Normal file
View File

@@ -0,0 +1,105 @@
# Token-Go
This library focuses on solving login authentication problems, such as: login, multi-account login, shared token, logout, kickout ...
## Installation
```
go get github.com/weloe/token-go
```
## Simple Example
```go
import (
"fmt"
tokenGo "github.com/weloe/token-go"
"log"
"net/http"
)
var enforcer *tokenGo.Enforcer
func main() {
var err error
// use default adapter
adapter := tokenGo.NewDefaultAdapter()
enforcer, err = tokenGo.NewEnforcer(adapter)
// enable logger
enforcer.EnableLog()
if err != nil {
log.Fatal(err)
}
http.HandleFunc("/user/login", Login)
http.HandleFunc("/user/logout", Logout)
http.HandleFunc("/user/isLogin", IsLogin)
http.HandleFunc("/user/kickout", Kickout)
log.Fatal(http.ListenAndServe(":8081", nil))
}
func Login(w http.ResponseWriter, req *http.Request) {
token, err := enforcer.Login("1", tokenGo.NewHttpContext(req, w))
if err != nil {
fmt.Fprintf(w, "Login error: %s\n", err)
}
fmt.Fprintf(w, "token: %s\n", token)
}
func Logout(w http.ResponseWriter, req *http.Request) {
err := enforcer.Logout(tokenGo.NewHttpContext(req, w))
if err != nil {
fmt.Fprintf(w, "Logout error: %s\n", err)
}
fmt.Fprintf(w, "logout success")
}
func IsLogin(w http.ResponseWriter, req *http.Request) {
login, err := enforcer.IsLogin(tokenGo.NewHttpContext(req, w))
if err != nil {
fmt.Fprintf(w, "IsLogin() = %v: %v", login, err)
}
fmt.Fprintf(w, "IsLogin() = %v", login)
}
func Kickout(w http.ResponseWriter, req *http.Request) {
err := enforcer.Kickout(req.URL.Query().Get("id"), "")
if err != nil {
fmt.Fprintf(w, "error: %s\n", err)
}
fmt.Fprintf(w, "logout success")
}
```
## Custom TokenConfig
```go
import (
"fmt"
tokenGo "github.com/weloe/token-go"
"github.com/weloe/token-go/config"
"log"
"net/http"
)
var enforcer *tokenGo.Enforcer
func main() {
var err error
// use default adapter
adapter := tokenGo.NewDefaultAdapter()
tokenConfig := &config.TokenConfig{
TokenName: "uuid",
Timeout: 60,
IsReadCookie: true,
IsReadHeader: true,
IsReadBody: false,
IsConcurrent: true,
IsShare: true,
MaxLoginCount: -1,
}
enforcer, err = tokenGo.NewEnforcer(tokenConfig, adapter)
}
```

61
examples/http-server.go Normal file
View File

@@ -0,0 +1,61 @@
package main
import (
"fmt"
tokenGo "github.com/weloe/token-go"
"log"
"net/http"
)
var enforcer *tokenGo.Enforcer
func main() {
var err error
// use default adapter
adapter := tokenGo.NewDefaultAdapter()
enforcer, err = tokenGo.NewEnforcer(adapter)
// enable logger
enforcer.EnableLog()
if err != nil {
log.Fatal(err)
}
http.HandleFunc("/user/login", Login)
http.HandleFunc("/user/logout", Logout)
http.HandleFunc("/user/isLogin", IsLogin)
http.HandleFunc("/user/kickout", Kickout)
log.Fatal(http.ListenAndServe(":8081", nil))
}
func Login(w http.ResponseWriter, req *http.Request) {
token, err := enforcer.Login("1", tokenGo.NewHttpContext(req, w))
if err != nil {
fmt.Fprintf(w, "Login error: %s\n", err)
}
fmt.Fprintf(w, "token: %s\n", token)
}
func Logout(w http.ResponseWriter, req *http.Request) {
err := enforcer.Logout(tokenGo.NewHttpContext(req, w))
if err != nil {
fmt.Fprintf(w, "Logout error: %s\n", err)
}
fmt.Fprintf(w, "logout success")
}
func IsLogin(w http.ResponseWriter, req *http.Request) {
login, err := enforcer.IsLogin(tokenGo.NewHttpContext(req, w))
if err != nil {
fmt.Fprintf(w, "IsLogin() = %v: %v", login, err)
}
fmt.Fprintf(w, "IsLogin() = %v", login)
}
func Kickout(w http.ResponseWriter, req *http.Request) {
err := enforcer.Kickout(req.URL.Query().Get("id"), "")
if err != nil {
fmt.Fprintf(w, "error: %s\n", err)
}
fmt.Fprintf(w, "logout success")
}

View File

@@ -23,7 +23,7 @@ func (d *DefaultLogger) Login(loginType string, id interface{}, tokenValue strin
if !d.enable {
return
}
log.Printf("LoginByModel: loginId = %v, loginType = %v, tokenValue = %v, "+
log.Printf("Login: loginId = %v, loginType = %v, tokenValue = %v, "+
"loginMode = %v", id, loginType, tokenValue, loginModel)
}

View File

@@ -13,6 +13,9 @@ type GenerateTokenFunc struct {
}
func (g *GenerateTokenFunc) Exec(tokenForm string) (string, error) {
if tokenForm == "" {
return "", errors.New("GenerateToken failed: tokenStyle is nil")
}
handlerFunc, err := g.GetFunction(tokenForm)
if err != nil {
return "", err
@@ -30,7 +33,7 @@ func (g *GenerateTokenFunc) GetFunction(tokenForm string) (GenerateFunc, error)
return nil, errors.New("GetFunction() failed: load func error")
}
if value == nil {
return nil, errors.New("GetFunction() failed: func doesn't exist")
return nil, errors.New("GetFunction() failed: this tokenStyle generate func doesn't exist")
}
handlerFunc := value.(GenerateFunc)
return handlerFunc, nil