本文摘自php中文网,作者尚,侵删。
golang jwt前端验证的方法:
客户端通过在request对象header里添加token参数,发送到服务端,服务端再拿出token进行比对。
token的第一次产生是发生在login检查账户存在并且正确之后,为该用户赋予一块令牌(加密字符串),并将token放入response的header里,客户端登陆成功后,从response里取出token,并在以后的操作request请求,都保持在header里添加该段令牌,令牌有效期失效后,只有重新login,才能获取新的令牌。
实现:
服务端_token生成并放入response的header
前端接受获取: response.headers[‘x-auth-token’]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | import "github.com/fwhezfwhez/jwt"
func Login(c *gin.Context){
...(验证身份正确)
token := jwt.GetToken()
token.AddPayLoad( "userName" , user.UserName).AddPayLoad( "role" , "admin" ).AddHeader( "typ" , "JWT" ).AddHeader( "alg" , "HS256" )
exp:=time.Now().Add(1*time.Hour)
token.AddPayLoad( "exp" , strconv.FormatInt(exp.Unix(), 10))
jwts, _, erre := token.JwtGenerator(consts.Secret)
if erre != nil {
fmt.Println( "token生成出错" )
return
}
fmt.Println( "生成的jwt是:" , jwts)
c.Writer.Header().Add( "x-auth-token" , jwts)
...
}
|
客户端_发送login请求
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | var Token string
func main(){
...
var content = fmt.Sprintf( "userName=admin&password=123456" )
t1 := time.Now()
resp, err := http.Post(host+ "v1/POST/user/login" , "application/x-www-form-urlencoded" , strings.NewReader(content))
Token =resp.Header.Get( "x-auth-token" )
t2 := time.Now()
fmt.Println(t2.Sub(t1))
if err != nil {
panic(err)
}
helpRead(resp)
...
}
|
客户端_请求其他功能获取列表
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | ...
t1 := time.Now()
client := &http.Client{}
req, err := http.NewRequest( "GET" , "http://localhost:8087/v1/GET/mediums/list" ,nil)
req.Header.Add( "x-auth-token" , Token)
resp, err := client.Do(req)
t2 := time.Now()
fmt.Println(t2.Sub(t1))
if err != nil {
panic(err)
}
helpRead(resp)
...
|
服务端_令牌校验
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | func main(){
...
router := gin.Default()
router.POST(consts.LoginURL, userControl.Login)
router.Use(Validate())
router.GET(consts.GetMediumsURL, mediumControl.GetMediums)
router.....
...
}
func Validate()gin.HandleFunc{
return func(c *gin.Context) {
if JWTToken := c.Request.Header.Get( "x-auth-token" );JWTToken!= "" {
token :=jwt.GetToken()
legal,err:=token.IsLegal(JWTToken,consts.Secret)
if err!=nil{
fmt.Println(err)
c.Abort()
c.JSON(200,consts.ResponseTokenValidateError)
return
}
if !legal{
c.Abort()
c.JSON(200,consts.ResponseTokenValidateWrong)
return
}
c.Next()
} else {
c.JSON(200, consts.ResponseTokenNotFound)
c.Abort()
return
}
}
}
|
更多golang知识请关注PHP中文网golang教程栏目。
以上就是golang jwt前端怎么验证的详细内容,更多文章请关注木庄网络博客!!
相关阅读 >>
go语言开篇
go get下载包失败问题
阅读golang 切片(slice)底层源码
golang (v2)分布式id生成系统,高性能、高可用、易扩展的id生成服务
详解golang中方法的receiver为指针和不为指针的区别
go-const
go 在证券行情系统中的应用
有趣的闭包
go基础及语法(四)
golang调试工具有哪些?
更多相关阅读请进入《golang》频道 >>
老貘
一个与时俱进的Go编程知识库。
转载请注明出处:木庄网络博客 » golang jwt前端怎么验证