GO中的用户认证系统
User Authentication System in GO
Go 中是否存在预制的用户身份验证系统?
我来自 Ruby 背景,我真的很想在 Rails' device 上看到类似于 Ruby 的东西,这是一个完整的用户管理系统。它负责从创建表单到散列和加盐密码的所有工作。它还负责将数据存储到数据库、设置会话等。
我发现有一个名为 goth 的包允许社交登录(facebook、twitter ++),但它不处理用户凭据的存储。它还不允许使用电子邮件 + 密码进行“正常”注册。
关于 Go 的这个主题,我似乎只能找到一些关于如何制作你自己的基本的、非常不安全的用户登录系统的教程。
我真的很想看到一个系统可以处理用户身份验证并允许通过 OAuth/OAuth2 进行社交登录。有这样的东西吗?
我寻求的解决方案很可能是 Go 网络框架的一部分或插件。
背景
我正在考虑将我的 Rails 应用程序转移到更高性能的框架,因为我当前的 rails 应用程序正在使用大量 RAM。于是我的目光转向了围棋。但是,如果没有可靠的用户身份验证系统,我无法转换为 Go。制作自己的用户身份验证系统不是一个很好的做法。
简答:没有。
长答案:Ruby on Rails 是一个框架,Go 是一门语言。为 Go 制作一个 "universal" 身份验证系统将是一项艰巨的任务 and/or 必须 非常 固执己见的设计,因为大多数身份验证系统都依赖于会话存储 and/or数据库。 Rails 可以做到这一点(使用库。如 Devise),因为框架的某些部分(如 ActiveRecord 和 ActionController)提供了 Devise 可以与之对话的抽象 API。
在大多数情况下,您需要将几个库结合在一起才能获得您需要的 Go 语言。 "Gluing" 事情在一起是通常首选的做事方式,monolithic/kitchen 接收器框架通常不受青睐。
对图书馆的一些建议:
- https://github.com/markbates/goth(一个 OAuth/OAuth2 包)
- http://www.gorillatoolkit.org/pkg/sessions(用户会话数)
- https://godoc.org/golang.org/x/crypto/bcrypt(密码散列)
- https://goji.io/(一个微型框架[认为:Sinatra 级别] 带有可靠的中间件API)
- https://github.com/jmoiron/sqlx(Go 标准 database/sql 包的便捷包装)
- http://www.gorillatoolkit.org/pkg/schema(Go 结构库的 POST 形式)
这些不会为您提供不同的用户类型,不会为您编写查询等。我发现使用服务器端会话编写自己的 "two user level"(常规与管理员)身份验证相当简单,单个用户 table 和一个包装 "need auth" 路由并检查会话的 HTTP 中间件,否则它将用户重定向到登录页面(并保存当前 URL 以备重新访问-直接在)之后。
Go 中是否存在预制的用户身份验证系统?
我来自 Ruby 背景,我真的很想在 Rails' device 上看到类似于 Ruby 的东西,这是一个完整的用户管理系统。它负责从创建表单到散列和加盐密码的所有工作。它还负责将数据存储到数据库、设置会话等。
我发现有一个名为 goth 的包允许社交登录(facebook、twitter ++),但它不处理用户凭据的存储。它还不允许使用电子邮件 + 密码进行“正常”注册。
关于 Go 的这个主题,我似乎只能找到一些关于如何制作你自己的基本的、非常不安全的用户登录系统的教程。
我真的很想看到一个系统可以处理用户身份验证并允许通过 OAuth/OAuth2 进行社交登录。有这样的东西吗?
我寻求的解决方案很可能是 Go 网络框架的一部分或插件。
背景
我正在考虑将我的 Rails 应用程序转移到更高性能的框架,因为我当前的 rails 应用程序正在使用大量 RAM。于是我的目光转向了围棋。但是,如果没有可靠的用户身份验证系统,我无法转换为 Go。制作自己的用户身份验证系统不是一个很好的做法。
简答:没有。
长答案:Ruby on Rails 是一个框架,Go 是一门语言。为 Go 制作一个 "universal" 身份验证系统将是一项艰巨的任务 and/or 必须 非常 固执己见的设计,因为大多数身份验证系统都依赖于会话存储 and/or数据库。 Rails 可以做到这一点(使用库。如 Devise),因为框架的某些部分(如 ActiveRecord 和 ActionController)提供了 Devise 可以与之对话的抽象 API。
在大多数情况下,您需要将几个库结合在一起才能获得您需要的 Go 语言。 "Gluing" 事情在一起是通常首选的做事方式,monolithic/kitchen 接收器框架通常不受青睐。
对图书馆的一些建议:
- https://github.com/markbates/goth(一个 OAuth/OAuth2 包)
- http://www.gorillatoolkit.org/pkg/sessions(用户会话数)
- https://godoc.org/golang.org/x/crypto/bcrypt(密码散列)
- https://goji.io/(一个微型框架[认为:Sinatra 级别] 带有可靠的中间件API)
- https://github.com/jmoiron/sqlx(Go 标准 database/sql 包的便捷包装)
- http://www.gorillatoolkit.org/pkg/schema(Go 结构库的 POST 形式)
这些不会为您提供不同的用户类型,不会为您编写查询等。我发现使用服务器端会话编写自己的 "two user level"(常规与管理员)身份验证相当简单,单个用户 table 和一个包装 "need auth" 路由并检查会话的 HTTP 中间件,否则它将用户重定向到登录页面(并保存当前 URL 以备重新访问-直接在)之后。