Skip to content

validating JSON Web Tokens middleware for elton

License

Notifications You must be signed in to change notification settings

vicanso/elton-jwt

Repository files navigation

elton-jwt

Build Status

JWT middleware for elton.

package main

import (
	"bytes"
	"encoding/json"
	"net/http"
	"time"

	"github.com/vicanso/elton"
	jwt "github.com/vicanso/elton-jwt"
)

func main() {
	e := elton.New()
	jwtCookie := "jwt"

	ttlToken := &jwt.TTLToken{
		TTL: 24 * time.Hour,
		// 密钥用于加密数据,需保密
		Secret: []byte("my secret"),
	}

	// Passthrough为false,会校验token是否正确
	jwtNormal := jwt.NewJWT(jwt.Config{
		CookieName: jwtCookie,
		TTLToken:   ttlToken,
	})
	// 用于初始化创建token使用(此时可能token还没有或者已过期)
	jwtPassthrough := jwt.NewJWT(jwt.Config{
		CookieName:  jwtCookie,
		TTLToken:    ttlToken,
		Passthrough: true,
	})

	e.GET("/login", jwtPassthrough, func(c *elton.Context) (err error) {
		// 模拟登录成功后获取用户信息
		c.Set(jwt.DefaultKey, `{"account":"tree.xie"}`)
		c.BodyBuffer = bytes.NewBufferString(`{"account":"tree.xie"}`)
		return
	})

	e.GET("/", jwtNormal, func(c *elton.Context) (err error) {
		// 获取相应的用户信息
		userInfo := c.GetString(jwt.DefaultKey)
		c.BodyBuffer = bytes.NewBufferString(userInfo)
		return
	})
	err := e.ListenAndServe(":3000")
	if err != nil {
		panic(err)
	}
}