设为首页 加入收藏

TOP

golang简单实现jwt验证(beego、xorm、jwt)(二)
2019-01-12 12:08:25 】 浏览:883
Tags:golang 简单 实现 jwt 验证 beego xorm
uot;, http.StatusBadRequest) return } claims := make(jwt.MapClaims) claims["exp"] = time.Now().Add(time.Hour * time.Duration(1)).Unix() claims["iat"] = time.Now().Unix() claims["nameid"] = loginuser.Userloginname claims["User"] = "true" token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims) tokenString, err := token.SignedString([]byte(beego.AppConfig.String("jwtkey"))) if err != nil { this.Ctx.Output.Header("SetStatus", strconv.Itoa(http.StatusInternalServerError)) fatal(err) http.Error(this.Ctx.ResponseWriter, "Server is Wrong", http.StatusInternalServerError) return } fmt.Println("Token:", tokenString) this.Ctx.WriteString(fmt.Sprintf("{\"Token\":\"%s\"}", tokenString)) } func (this *AuthorizeController) Userinfo() { token := this.Ctx.Input.Header("Authorization") b, t := CheckToken(token) if !b { this.Ctx.WriteString(fmt.Sprintf("Error:%s", token)) return } loginuser := &Model.Usertable{Userloginname: claims["nameid"].(string)} has, err := engine.Get(loginuser) if err != nil { fatal(err) } if !has { fatal(err) http.Error(this.Ctx.ResponseWriter, "User Not Exist", http.StatusBadRequest) return } data, err := json.Marshal(loginuser) if err != nil { fmt.Println(err) } this.Ctx.WriteString(fmt.Sprintf("{\"Token\":\"%s\",\"User\":%s}", token, string(data))) } // 校验token是否有效 func CheckToken(token string) (b bool, t *jwt.Token) { kv := strings.Split(token, " ") if len(kv) != 2 || kv[0] != "Bearer" { beego.Error("AuthString invalid:", token) return false, nil } t, err := jwt.Parse(kv[1], func(*jwt.Token) (interface{}, error) { return []byte(beego.AppConfig.String("jwtkey")), nil }) fmt.Println(t) if err != nil { fmt.Println("转换为jwt claims失败.", err) return false, nil } return true, t }

LoginModel.go 提交登录用户名和密码的结构

package Model
 
type LoginModel struct {
	UserName string `xorm:"VARCHAR(50)"`
	PassWord string `xorm:"VARCHAR(50)"`
}

UserTable.go 用户信息实体结构

package Model
 
type Usertable struct {
	Userid        int    `xorm:"not null pk INT(4)"`
	Userloginname string `xorm:"VARCHAR(50)"`
	Userloginpwd  string `xorm:"VARCHAR(50)"`
	Username      string `xorm:"NVARCHAR(200)"`
	Usermobile    string `xorm:"VARCHAR(11)"`
	Userislock    int    `xorm:"BIT(1)"`
}

main.go中通过beego启动http的web服务

package main
 
import (
	"GoApi/controller"
	"github.com/astaxie/beego"
)
 
func main() {
	beego.AutoRouter(&controller.AuthorizeController{})
	beego.Run()
}

下一步

1、学习如何在拦截器里拦截验证后把某个结果值传递给要访问的接口(目前是在接口里重新解析一遍jwt的token)

2、beego如何实现只允许post访问某个controller的接口(AutoRouter模式下)

3、Struct如何实现中文的说明(就是鼠标放上去会显示中文描述,类似C#类的说明那种)

首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇GoLang 命令 下一篇Mysql学习(一)添加一个新的用户并..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目