当前位置: 首页 > news >正文

fiber框架token校验

文档地址 https://github.com/gofiber/jwt


package main

import (
	"time"

	"github.com/dgrijalva/jwt-go"
	"github.com/gofiber/fiber"
	"github.com/gofiber/fiber/middleware"
	jwtware "github.com/gofiber/jwt"
)

const jwtSecret = "asecret"

//token验证
func authRequired() func(ctx *fiber.Ctx) {
	return jwtware.New(jwtware.Config{
		SigningKey: []byte(jwtSecret),
		ErrorHandler: func(ctx *fiber.Ctx, err error) {
			ctx.Status(fiber.StatusUnauthorized).JSON(fiber.Map{
				"err": "Unauthorized",
			})
		},
	})
}

func main() {
	app := fiber.New()
	app.Use(middleware.Logger()) //查看访问的接口

	app.Get("/", func(ctx *fiber.Ctx) {
		ctx.Send("hello")
	})

	app.Post("/login", login)
	app.Get("/hello", authRequired(), func(ctx *fiber.Ctx) {

		ctx.Send("hello")
	})

	err := app.Listen(3000)
	if err != nil {
		panic(err)
	}

}

//登录
func login(ctx *fiber.Ctx) {
	type request struct {
		Email    string `json:"email"`
		Password string `json:"password"`
	}
	var body request
	err := ctx.BodyParser(&body)
	if err != nil {
		ctx.Status(fiber.StatusBadRequest).JSON(fiber.Map{
			"error": "cannot parse json",
		})
		return
	}
	if body.Email != "bob@gmail.com" || body.Password != "password123" {
		ctx.Status(fiber.StatusUnauthorized).JSON(fiber.Map{
			"error": "Bad  Credentials",
		})
		return
	}

	// Create token
	token := jwt.New(jwt.SigningMethodHS256)

	// Set claims
	claims := token.Claims.(jwt.MapClaims)
	claims["name"] = "wangmin"
	claims["admin"] = true
	claims["exp"] = time.Now().Add(time.Hour * 72).Unix()

	// Generate encoded token and send it as response.
	t, err := token.SignedString([]byte(jwtSecret))
	if err != nil {
		ctx.SendStatus(fiber.StatusInternalServerError)
		return
	}

	ctx.Status(fiber.StatusOK).JSON(fiber.Map{
		"token": t,
		"user": struct {
			Id    int    `json:"id"`
			Email string `json:"email"`
		}{
			Id:    1,
			Email: "bob@gmail.com",
		},
	})
}

相关文章:

  • uniapp导出excel
  • 华为2004年招收应届大学毕业生技术支持面试题。
  • go语言中的指针(一)
  • 华为面试题
  • Error: Unable to ‘pub upgrade‘ flutter tool
  • 中兴面试C语言题1
  • Goexit
  • 中兴面试C语言题(2)
  • golang定时器
  • Intel的笔试,大家看来都不想交白卷
  • go里面select使用
  • golang以打印机为例 互斥锁的问题 使用channel解决
  • 几道面试题
  • golang读写锁简单例子
  • 急问数据结构用c c++描述的区别?
  • 【Linux系统编程】快速查找errno错误码信息
  • eclipse(luna)创建web工程
  • Js基础——数据类型之Null和Undefined
  • LeetCode18.四数之和 JavaScript
  • October CMS - 快速入门 9 Images And Galleries
  • PHP的Ev教程三(Periodic watcher)
  • React组件设计模式(一)
  • vuex 笔记整理
  • 关于extract.autodesk.io的一些说明
  • 汉诺塔算法
  • 扑朔迷离的属性和特性【彻底弄清】
  • 体验javascript之美-第五课 匿名函数自执行和闭包是一回事儿吗?
  • 问:在指定的JSON数据中(最外层是数组)根据指定条件拿到匹配到的结果
  • 我从编程教室毕业
  • 我的zsh配置, 2019最新方案
  •  一套莫尔斯电报听写、翻译系统
  • Redis4.x新特性 -- 萌萌的MEMORY DOCTOR
  • 交换综合实验一
  • ​sqlite3 --- SQLite 数据库 DB-API 2.0 接口模块​
  • ​TypeScript都不会用,也敢说会前端?
  • #Linux(帮助手册)
  • #ubuntu# #git# repository git config --global --add safe.directory
  • (13)Hive调优——动态分区导致的小文件问题
  • (C#)Windows Shell 外壳编程系列9 - QueryInfo 扩展提示
  • (Forward) Music Player: From UI Proposal to Code
  • (八)Docker网络跨主机通讯vxlan和vlan
  • (二)【Jmeter】专栏实战项目靶场drupal部署
  • (二)springcloud实战之config配置中心
  • .NET Core跨平台微服务学习资源
  • .NET 简介:跨平台、开源、高性能的开发平台
  • .NET/C# 使用反射注册事件
  • .net6Api后台+uniapp导出Excel
  • .NetCore Flurl.Http 升级到4.0后 https 无法建立SSL连接
  • .sdf和.msp文件读取
  • /etc/apt/sources.list 和 /etc/apt/sources.list.d
  • /使用匿名内部类来复写Handler当中的handlerMessage()方法
  • [ NOI 2001 ] 食物链
  • [ vulhub漏洞复现篇 ] struts2远程代码执行漏洞 S2-005 (CVE-2010-1870)
  • [BZOJ1877][SDOI2009]晨跑[最大流+费用流]
  • [cb]UIGrid+UIStretch的自适应