社区
其他技术讨论专区
帖子详情
gin 框架,登录验证功能,然后每个接口都需要鉴权,用哪个包?
weixin_38051999
2019-09-20 10:38:54
gin 框架,登录验证功能,然后每个接口都需要鉴权(session),用哪个包?
...全文
669
9
打赏
收藏
gin 框架,登录验证功能,然后每个接口都需要鉴权,用哪个包?
gin 框架,登录验证功能,然后每个接口都需要鉴权(session),用哪个包?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
9 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
weixin_38066087
2019-09-20
打赏
举报
回复
casbin
weixin_38092995
2019-09-20
打赏
举报
回复
网上看到这个例子,cookie 的 value 要自己填吗?比如用SHA256加密 用户名密码得到的字串? ```go package main import ( "fmt" "github.com/gin-gonic/gin" "net/http" ) func main() { r := gin.Default() r.Use(AuthMiddleWare()) { r.GET("/login", func(c *gin.Context) { cookie := &http.Cookie{ Name: "session_id", Value: "onion", //这个是value要自己生成??规则自定就可以? Path: "/", HttpOnly: true, } http.SetCookie(c.Writer, cookie) c.String(http.StatusOK, "登录成功") }) r.GET("/home", AuthMiddleWare(), func(c *gin.Context) { c.JSON(http.StatusOK, gin.H{"data": "hello world"}) }) } r.Run() // listen and serve on 0.0.0.0:8080 } func AuthMiddleWare() gin.HandlerFunc { return func(c *gin.Context) { fmt.Println(c.Request.URL.String()) if cookie, err := c.Request.Cookie("session_id"); err == nil { value := cookie.Value fmt.Println(value) if value == "onion" { c.Next() return } } if url := c.Request.URL.String(); url == "/login" { c.Next() return } c.JSON(http.StatusUnauthorized, gin.H{ "error": "Unauthorized", }) c.Abort() return } } ```
weixin_38097536
2019-09-20
打赏
举报
回复
Value 肯定要自己填写,你提到的用 SHA256 加密用户名密码也可以的,自己定义。 因为 http 是无状态的,你服务端需要保存这个字符串及其对应的用户,用户请求时带上这个 cookie,才能知道是请求用户是否登录、有没有权限等
weixin_38101791
2019-09-20
打赏
举报
回复
没有现成的吗。。。比如python 的flask, 登录只要验证用户名密码就可以了,所有接口上加个装饰器 @login_required,就可以了。 那用 go 岂不是我要自己写一套鉴别方法和功能。。。如何生成value,如何比对value 验证身份
weixin_38108526
2019-09-20
打赏
举报
回复
自己写呀,写中间件
weixin_38115771
2019-09-20
打赏
举报
回复
gin不熟,但是大概思路应该是共通的。 你应该是需要一个sesson组件和一个user组件,里面应该提供合适的中间件 你的代码太原始了,而且居然没有记录登录前的地址…… 以我的代码为例 //middlewares.go MiddlewareMemberLoginOrRedirect = MemberLoginRedirector.Middleware(membermodule.Member) MiddlewareMemberLoginReqiured = user.LoginRequiredMiddleware(membermodule.Member, nil) //userrouter.go var UserMiddlewares = func() middleware.Middlewares { return middleware.Middlewares{ middlewares.MiddlewareInstallMemberSession, middlewares.MiddlewareMemberLoginOrRedirect, } } //routers.go Router.StripPrefix("/usercenter/user"). Use(UserMiddlewares()...). Handle(RouterUser)
weixin_38125228
2019-09-20
打赏
举报
回复
如果你是用标准库的http为框架的话,session库可以考虑 https://github.com/gorilla/sessions
weixin_38138286
2019-09-20
打赏
举报
回复
[github.com/gin-contrib/sessions](github.com/gin-contrib/sessions)这个中间件可以帮助 到你 ~~~ go package main import ( "github.com/gin-contrib/sessions" "github.com/gin-contrib/sessions/cookie" "github.com/gin-gonic/gin" ) func main() { r := gin.Default() store := cookie.NewStore([]byte("secret")) r.Use(sessions.Sessions("session_id", store)) r.GET("/login", func(c *gin.Context) { session := sessions.Default(c) //登录成功后设置一下状态 // AuthMiddleWare里可以判断是否登录成功,使用session.Get("status") session.Set("status", true) session.Save() c.JSON(200, gin.H{"status": true}) }) r.Run(":8000") } ~~~
weixin_38141003
2019-09-20
打赏
举报
回复
casbin
Gin
框架
中如何实现 JWT
鉴权
中间件
JWT,全称是 JSON Web Token,它是一个开放标准(RFC 7519),用于在各方之间作为 JSON 对象安全地传输信息。
每个
Token 是一个紧凑且 URL 安全的字符串,能够被签名和加密,从而保证信息的完整性、真实性和机密性。JWT 通常由三部分组成,分别是头部(Header)、载荷(Payload)和签名(Signature),它们之间用圆点(.)连接组合成一个完整的 Token。头部(Header)
[
鉴权
校验]简述四种
鉴权
机制并用go语言实现JWT校验
本文简要介绍了4类常用的
鉴权
机制,重点讲解了JWT校验机制,并在go语言下用
gin
框架
和go-jwt/v5库实现了jwt的签发和校验。
Gin
中使用jwt-go实现JWT
鉴权
登陆
JWT全称Json web token ,是一种用于通信双方之间传递安全信息的简洁的、URL安全的表述性声明规范,是目前最流行的跨域身份
验证
解决方案。JWT基于token的
鉴权
机制类似于http协议也是无状态的,它不
需要
在服务端去保留用户的认证信息或者会话信息,一旦用户完成了登陆,在接下来的
每个
请求中都会
包
含JWT,可以用来
验证
用户身份以及对路由,服务和资源的访问权限的
验证
。由于它的开销非常小,可以轻松的在不同域名的系统中传递,这也为应用的扩展提供了便利。JWT 以 JSON 对象的形式安全传递信息。
【Golang】
Gin
框架
中如何使用JWT来实现
登录
认证
JWT: JSON Web Token,是一种用于身份
验证
和授权的开放标准,JWT可以在网络应用间安全的传输。JWT由三个部分组成:头部(Header)、载荷(Payload)和签名(Signature) JWT具有可扩展性、简单、轻量级、跨语言等优点,是前后端分离
框架
中最常用的
验证
方式。
玩转
Gin
框架
:Golang使用
Gin
完成
登录
流程
Token 认证机制是一种常用的身份
验证
方法,特别适用于现代化的 前后端分离 和 微服务架构 的应用。相比传统的 Session 认证机制,Token 认证具有一些明显的优势,特别是在 扩展性 和 跨平台 支持上,大致流程如下:4. 客户端通过用户名和密码请求
登录
,后端对接收到的账号和密码进行
验证
5. 如
验证
通过,则会签发一个Token返回给客户端进行存储6. 后续客户端通过头部携带Token向服务器请求资源。
其他技术讨论专区
478
社区成员
790,949
社区内容
发帖
与我相关
我的任务
其他技术讨论专区
其他技术讨论专区
复制链接
扫一扫
分享
社区描述
其他技术讨论专区
其他
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章