Golang Go语言中 goal 的用户认证(Auth)模块完成,离生产环境又双叒叕近了一步

发布于 1周前 作者 eggper 来自 Go语言

Golang Go语言中 goal 的用户认证(Auth)模块完成,离生产环境又双叒叕近了一步

Goal-web/auth

goal-web/auth
goal 框架的用户认证组件,你可以在 httpwebsocket 或者其他环境使用,有上下文即可。

安装 - install

go get github.com/goal-web/auth

使用 - usage

goal 的脚手架自带了绝大多数开发一个 web 应用的所需要的功能和组件,当然这也包括了认证组件。一般情况下,我们只需要在 .env 修改自己的认证配置即可,比如 jwt 驱动的 secret 、session 驱动的 session_key 。

配置 - config

默认情况下,config/auth.go 配置文件像下面那样,默认添加了 jwtsession 两个守卫配置

package config

import ( “github.com/goal-web/auth” “github.com/goal-web/contracts” “github.com/goal-web/example/models” “github.com/golang-jwt/jwt” )

func init() { configs[“auth”] = func(env contracts.Env) interface{} { return auth.Config{ Defaults: struct { Guard string User string }{ Guard: env.StringOption(“auth.default”, “jwt”), // 默认守卫 User: env.StringOption(“auth.user”, “db”), // 默认用户提供者 }, Guards: map[string]contracts.Fields{ “jwt”: { // 守卫名称 “driver”: “jwt”, // 驱动,目前支持 jwt 、session “secret”: env.GetString(“auth.jwt.secret”), // jwt 签名所需的 secret ,不同的守卫建议不同的 secret “method”: jwt.SigningMethodHS256, // jwt 签名方法 “lifetime”: 60 * 60 * 24, // token 有效时长,单位:秒 “provider”: “db”, // 用户提供者名 }, “session”: { // 守卫名称 “driver”: “session”, // 驱动名 “provider”: “db”, // 用户提供者名 // session 驱动所需的参数,如果应用需要配置多个 session 驱动的守卫,那么需要配置不一样的 session_key “session_key”: env.StringOption(“auth.session.key”, “auth_session”), }, }, Users: map[string]contracts.Fields{ // 用户提供者,目前只支持 db “db”: { // 用户提供者名称 “driver”: “db”, // 驱动名称 “model”: models.UserModel, // 用户模型 }, }, } } }

.env 的数据库相关配置

# 默认连接
auth.jwt.secret=jwt_secret
auth.default=jwt

定义模型 - define a model

app/models/user.go 文件

package models

import ( “github.com/goal-web/database/table” “github.com/goal-web/supports/class” )

var ( UserModel = table.NewModel(class.Make(new(User)), “users”) )

func UserQuery() *table.Table { return table.FromModel(UserModel) }

type User struct { Id string json:"id" NickName string json:"name" }

// GetId 实现了 contracts.Authenticatable 接口,此方法必不可少 func (u User) GetId() string { return u.Id }

用法 - method of use

package controllers

import ( “github.com/goal-web/contracts” “github.com/goal-web/example/models” )

func LoginExample(guard contracts.Guard) contracts.Fields { // 这是伪代码 user := models.UserQuery().First().(models.User)

return contracts.Fields{
	"token": guard.Login(user), // jwt 返回 token ,session 返回 true
}

}

func GetCurrentUser(guard contracts.Guard) interface{} { return contracts.Fields{ “user”: guard.User(), // 已登录返回用户模型,否则返回 nil } }

使用中间件

package routes

import ( “github.com/goal-web/auth” “github.com/goal-web/contracts” “github.com/goal-web/example/app/http/controllers” “github.com/goal-web/session” )

func ApiRoutes(router contracts.Router) {

v1 := router.Group("", session.StartSession)

// 直接应用在路由上
v1.Get("/myself", controllers.GetCurrentUser, auth.Guard("jwt"))

// 应用在路由组上
authRouter := v1.Group("", auth.Guard("jwt"))
authRouter.Get("/myself", controllers.GetCurrentUser, auth.Guard("jwt"))

}

守卫 API - guard api

type Guard interface {
	Once(user Authenticatable)
	User() Authenticatable
	GetId() string
	Check() bool
	Guest() bool
	Login(user Authenticatable) interface{}
}

扩展守卫和用户提供者 - extension

这部分内容比较多,这里暂时不展开讲,后面会专门录视频介绍,欢迎大家点赞订阅

在 goal 之外的框架使用 - use in frameworks other than goal

这部分内容比较多,这里暂时不展开讲,后面会专门录视频介绍,欢迎大家点赞订阅

goal-web
goal-web/auth
[email protected]


更多关于Golang Go语言中 goal 的用户认证(Auth)模块完成,离生产环境又双叒叕近了一步的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html

6 回复

给楼主点赞

更多关于Golang Go语言中 goal 的用户认证(Auth)模块完成,离生产环境又双叒叕近了一步的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


谢谢。我给自己顶一个

截止到现在我发这条回复为止,goal 的队列组件、限流、序列化等组件都已经完成了,队列组件目前支持 卡夫卡和 nsq ,并且都支持延迟队列,后续还会继续完善和优化,欢迎大家关注。

恭喜你在Golang项目中完成了goal的用户认证(Auth)模块,这确实是向生产环境迈进的重要一步。以下是一些关于Go语言用户认证模块及后续部署到生产环境的建议:

  1. 认证模块优化

    • 确保你的认证模块支持多种认证方式,如用户名/密码、OAuth2、JWT等,以满足不同场景的需求。
    • 模块化设计是关键,它允许你根据项目需求轻松扩展或修改认证策略。
    • 考虑安全性,如使用HTTPS通信、对敏感数据加密存储等,确保认证过程的安全可靠。
  2. 生产环境部署准备

    • 编译你的Go应用程序,生成可执行文件,并准备好运行该应用程序的服务器。
    • 配置服务器环境,包括安装必要的操作系统和依赖项。
    • 将编译好的可执行文件传输到服务器上,并设置相应的环境变量。
    • 考虑使用反向代理服务器(如Nginx)来处理网络请求,并将请求转发给你的Go应用程序。
  3. 监控与日志

    • 在生产环境中,设置适当的监控和日志记录机制,以便及时发现和解决问题。
  4. 持续集成与持续部署

    • 考虑实施CI/CD流程,以自动化构建、测试和部署你的Go应用程序,提高开发效率。

再次祝贺你取得这一重要进展,希望这些建议能对你的项目有所帮助。

回到顶部