我已经被 Python (Django/Flask) 中可用的成熟框架宠坏了,所以当我开始学习 Go 时,我想知道 Go 中是否已经存在任何类似的框架到 django.contrib.auth还是烧瓶登录?
主要用例是处理简单的用户身份验证,并能够对其进行扩展以适应应用程序内的一些基于权限的路由。
我已经被 Python (Django/Flask) 中可用的成熟框架宠坏了,所以当我开始学习 Go 时,我想知道 Go 中是否已经存在任何类似的框架到 django.contrib.auth还是烧瓶登录?
主要用例是处理简单的用户身份验证,并能够对其进行扩展以适应应用程序内的一些基于权限的路由。
据我所知,没有。您可能获得的最接近的开箱即用身份验证是通过 Google AppEngine,其中可以检索用户的 Google 帐户,并且某些路径仅适用于应用程序管理员。
在标准的 Go Web 服务器中,您通常需要滚动自己的身份验证,但这并不像听起来那么困难。许多框架将您与实际上非常重要的决策隔离开来;在典型的 Go 风格中,您需要根据应用程序的需求做出这些决定,然后选择适合您的现有库。
无论您需要用户在何处登录,您都可能会使用 HTML 表单。这些通常会使用html/template包呈现。要在提交表单时检索值,请使用request.FormValue。
存储用户信息的方式有很多种;在使用os的文件系统或使用database/sql的 SQL 数据库中。一些 NoSQL 数据库也有成熟的驱动程序,包括MongoDB和Redis。
要计算哈希值并将其与密码进行比较,您需要使用预先存在的机制,这样您就不必自己重新发明它。为此,go.crypto子存储库提供了一个bcrypt包。
如果要存储会话数据,可以使用gorilla/sessions 之类的解决方案。根据您的安全需求,您可以将会话数据直接存储在(可选安全的)cookie 中,也可以将其存储在后端并仅在 cookie 中存储会话 ID。
来自 READ.me
Allows your Martini application to support user login via an OAuth 2.0 backend.