设为首页 加入收藏

TOP

golang简单实现jwt验证(beego、xorm、jwt)(一)
2019-01-12 12:08:25 】 浏览:882
Tags:golang 简单 实现 jwt 验证 beego xorm

程序目录结构

简单实现,用户登录后返回一个jwt的token,下次请求带上token请求用户信息接口并返回信息。

app.conf文件内容(可以用个beego直接读取里面的内容)写的是一个jwt的secretkey

jwtkey="12345678"

config.json里面保存的是连接数据库的用户名和密码(这里只是学习如何读取json的配置文件,可以集成到beego的app.conf文件里)

{
"sqltype":"mssql"
,"connstring":"server=.;port=1433;user id=sa;password=123;database=table1"
}

MSSqlHelper.go实现连接mssqlserver的数据库

package mssqlhelper
 
import (
	"fmt"
 
	"github.com/akkuman/parseConfig"
	_ "github.com/denisenkom/go-mssqldb"
	"github.com/go-xorm/core"
	"github.com/go-xorm/xorm"
)
 
// 创建 XORM 客户端
func CreateClient() *xorm.Engine {
	var config = parseConfig.New("config.json")
	sqltype := config.Get("sqltype")
	fmt.Println(sqltype)
	connstring := config.Get("connstring")
	fmt.Println(connstring)
	engine, err := xorm.NewEngine(sqltype.(string), connstring.(string))
	if err != nil {
		println("open error:", &err)
	}
	engine.SetMapper(core.SameMapper{})      //表示Struct的类的名称和数据库中相同
	engine.ShowSQL(true)                     //显示SQL语句
	engine.Logger().SetLevel(core.LOG_DEBUG) //打印SQL语句
 
	return engine
}

AuthorizeController.go实现用户登录、获取用户信息接口

package controller
 
import (
	"GoApi/DAL"
	"GoApi/Model"
	"encoding/json"
	"fmt"
	"net/http"
	"strconv"
	"strings"
	"time"
 
	"github.com/astaxie/beego/context"
 
	"github.com/astaxie/beego"
	jwt "github.com/dgrijalva/jwt-go"
	"github.com/go-xorm/xorm"
)
 
var engine *xorm.Engine
 
type AuthorizeController struct {
	beego.Controller
}
 
var filterUser = func(ctx *context.Context) {
	token := ctx.Input.Header("Authorization")
 
	b, _ := CheckToken(token)
 
	//验证Token是否合法
	if !b {
		http.Error(ctx.ResponseWriter, "Token verification not pass", http.StatusBadRequest)
		return
	}
	fmt.Println("Request token:", token)
}
 
func init() {
	engine = mssqlhelper.CreateClient()
    //访问接口前验证token
	beego.InsertFilter("/Authorize/Userinfo", beego.BeforeRouter, filterUser)
}
 
type Token struct {
	Token string `json:"token"`
}
 
func fatal(err error) {
	if err != nil {
		beego.Error(err)
	}
}
 
//登录
func (this *AuthorizeController) Login() {
	var user Model.LoginModel
    // url?username=111&password=222 这种形式
	user.UserName = this.GetString("username")
	user.PassWord = this.GetString("password")
 
    //err := this.ParseForm(&user) //接收application/x-www-form-urlencoded形式POST传递数据,如Username=111&Password=2222
    // err := json.NewDecoder(this.Ctx.Request.Body).Decode(&user) //接收json形式Post的数据
 
	loginuser := &Model.Usertable{Userloginname: user.UserName}
	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
	}
 
	if user.PassWord != loginuser.Userloginpwd {
		this.Ctx.Output.Header("SetStatus", strconv.Itoa(http.StatusBadRequest))
 
		http.Error(this.Ctx.ResponseWriter, "Password Wrong&q
首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇GoLang 命令 下一篇Mysql学习(一)添加一个新的用户并..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目