mirror of
https://github.com/weloe/token-go.git
synced 2025-10-05 23:46:52 +08:00
feat: add usage example
This commit is contained in:
105
Readme.md
Normal file
105
Readme.md
Normal 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
61
examples/http-server.go
Normal 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")
|
||||||
|
}
|
@@ -23,7 +23,7 @@ func (d *DefaultLogger) Login(loginType string, id interface{}, tokenValue strin
|
|||||||
if !d.enable {
|
if !d.enable {
|
||||||
return
|
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)
|
"loginMode = %v", id, loginType, tokenValue, loginModel)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@@ -13,6 +13,9 @@ type GenerateTokenFunc struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (g *GenerateTokenFunc) Exec(tokenForm string) (string, error) {
|
func (g *GenerateTokenFunc) Exec(tokenForm string) (string, error) {
|
||||||
|
if tokenForm == "" {
|
||||||
|
return "", errors.New("GenerateToken failed: tokenStyle is nil")
|
||||||
|
}
|
||||||
handlerFunc, err := g.GetFunction(tokenForm)
|
handlerFunc, err := g.GetFunction(tokenForm)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", err
|
return "", err
|
||||||
@@ -30,7 +33,7 @@ func (g *GenerateTokenFunc) GetFunction(tokenForm string) (GenerateFunc, error)
|
|||||||
return nil, errors.New("GetFunction() failed: load func error")
|
return nil, errors.New("GetFunction() failed: load func error")
|
||||||
}
|
}
|
||||||
if value == nil {
|
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)
|
handlerFunc := value.(GenerateFunc)
|
||||||
return handlerFunc, nil
|
return handlerFunc, nil
|
||||||
|
Reference in New Issue
Block a user