go iris+jwt-go +redis+mysql 实现账号登录功能(一)

go iris+redis+mysql 实现账号登录功能(一)
设计思路:
1.postman 通过register 接口, 注册帐号。
2.通过login接口,生成token 和refresh token 并设置各自的有效时间(token 15分钟、refresh token 3天),写入redis 和mysql.
2. token 在后续的接口访问中需要携带,且用户每次访问接口后台都需要验证token 的时效,如果token 未过期则重置token 的有效时间
3. refresh 过期后,不允许继续刷新对应token 的有效是时间。前端跳转到登录页面让用户重新登录。

一:go iris 的register 接口
go 环境的安装步骤,可以查看其它网站。
1.1 iris 服务器的搭建
github(https://github.com/kataras/iris) 推荐的步骤为:
第一步:新建文件夹 myapp

mkdir myapp

进入mayapp 文件夹,新建main.go 文件 ,初始化项目模块

go mod init main

接下来参考go iris 的例子 https://github.com/kataras/iris/tree/master/_examples 里面的 Serverless.
往 main.go 文件里面粘入下面的代码

package main
import (
	"github.com/kataras/iris/v12"
)
func main() {
    app := iris.New()
    app.OnErrorCode(iris.StatusNotFound, notFound)

    app.Get("/", index)
    app.Get("/ping", status)

    app.Run(iris.Addr(":8080"),iris.WithCharset("UTF-8"))
}

func notFound(ctx iris.Context){
    code := ctx.GetStatusCode()
    ctx.JSON(iris.Map{
        "Message": msg,
        "Code": code,
    })
}

func index(ctx iris.Context) {
     fmt.Println("compeleted")
    ctx.JSON(iris.Map{
		"Message": "ok",
	}); 
}

func status(ctx iris.Context) {
    ctx.JSON(iris.Map{"Message": "OK"})
}

在终端里面敲 go run main.go。
如果有些包提示下载不成功,可能需要配置下go 环境的代理,然后运行

window 设置环境变量的指令:
go env -w GOPROXY=https://goproxy.io,direct
go env -w GO111MODULE=on  或者 set GO111MODULE=on 
linux 设置环境变量的指令
export GO111MODULE=on
export GOPROXY=https://goproxy.io,direct

运行成功后,在浏览器上输入http://localhost:8080/ping iris 就会返回下面的内容

{
  "Message": "OK"
}

iris 简单的服务器就搭建好了。

1.2 添加 register 路由。

//import 里面引入fmt
import (
	"fmt"
	"github.com/kataras/iris/v12"
)

//main 函数里面添加 register 路由
app.Post("/register", registerHandle)

//定义registerHandle 函数
func registerHandle (ctx iris.Context) {
	 var name = ctx.PostValue("name");
	 var password = ctx.PostValue("password");
	 fmt.Printf("%s %s",name,password);

	ctx.JSON(iris.Map{
		"data":iris.Map{
			"token":"",
			"refreshToken":""},
		"Message": "OK"})
}

保存运行,在postman 里面发送一个post 请求,测试结果如下:

在这里插入图片描述

二、 数据库链接
mysql 数据库的安装和运行远程连接配置,这里不讲。在服务器上安装好数据库后,用navicat 链接,如果能正常访问数据库,那数据库的配置就没有问题了。

package mysqlmanage

import (
	"fmt"
	"time"
	"github.com/jinzhu/gorm"
	_ "github.com/jinzhu/gorm/dialects/mysql"
)
var db *gorm.DB
// 数据库user 表的结果
type User struct {
	Id int `gorm:"AUTO_INCREMENT"`
	Name string `gorm:"size:255"`
	Password string `gorm:"size:255"`
	Token string `gorm:"size:255"`
	RefreshToken string `gorm:"size:255"`
	CreateDate time.Time
	UpdateTime time.Time
}
type mysqlmanage struct{}

var users []User;

//创建mysqlmanage 的实例
func NewMysqlManage() *mysqlmanage{
return &mysqlmanage{}
}

// 返回链接数据库的句柄
func (*mysqlmanage) MysqlConnGet() *gorm.DB {
return db;
}

//数据库连接初始化
func (*mysqlmanage) MysqlmanageInit() (*gorm.DB,error){
	dbSel, err := gorm.Open("mysql", "username:password@com@tcp(xx.xx.xx.xx:3306)/test_db?charset=utf8&parseTime=True&loc=Local"); // 数据库的链接配置
	db = dbSel;
	if err != nil {
	fmt.Printf("链接错误");
	//fmt.Printf(err);
	panic(err);
	}
	db.SingularTable(true) ;
	//db.AutoMigrate(&User{})
	// 创建表时添加表后缀
	db.Set("gorm:table_options", "ENGINE=InnoDB").AutoMigrate(&User{});
	// 添加唯一索引
	db.Model(&User{}).AddUniqueIndex("idx_user_id", "id");
	return db, err;
}


// 修改数据库记录的函数
func (*mysqlmanage) MysqlmanageAlterRecord(name string,password string,tokenString string,refreshTokenString string) {
		user := User{
			Token:tokenString,
			RefreshToken:refreshTokenString,
			UpdateTime:time.Now(),
		}
        db.Model(&user).Where(&User{Name: name, Password: password}).Update(&user);
        db.Where(&User{Name: name, Password: password}).First(&users);
        fmt.Printf("%+v ",users);
}

// 在数据库里面创建一条数据的函数
func (*mysqlmanage) MysqlmanageAddRecord(name string,password string) {
		user := User{
			Name:name,
			Password:password,
			CreateDate:time.Now(),
			UpdateTime:time.Now(),
		}
		db.Create(&user);
        db.Find(&users);
        fmt.Printf("%+v ",users);
}

四、 register 接口往数据库里
regis 接口在接收到用户的注册的个人信息后,需要填入数据库。
main.go:

package main

import (
	"fmt"
	mysqlmanage "main/mysql"
	"strings"
	"time"
	"github.com/kataras/iris/v12"
)
var MysqlManage = mysqlmanage.NewMysqlManage();//创建mysqlmanage模块的实例
//注册接口的实现函数
func registerHandle (ctx iris.Context) {
	var name = ctx.PostValue("name");
	var password = ctx.PostValue("password");
	fmt.Printf("%s %s",name,password);
		
	mysqlconn := MysqlManage.MysqlConnGet();//调用上面封装的mysqlmanage模块,连接数据
	var users []mysqlmanage.User;   
	mysqlconn.Where("name = ?", name).First(&users)//查询当前用户是否已经存在数据库
	fmt.Printf("%+v",users);
	if len(users)>0 {
			ctx.JSON(iris.Map{
				"Message": "该账户已经存在,不用重复注册",
			})
	} else {
		MysqlManage.MysqlmanageAddRecord(name,password);
		ctx.JSON(iris.Map{
				"Message": "注册成功",
				"responseCode":1000000,
		})
	}
}

这样register 接口已经实现

本文的参考过的一些文章链接:

  1. https://www.cnblogs.com/jianga/p/12487267.html
  2. https://www.cnblogs.com/flash55/p/11397032.html
  3. https://www.cnblogs.com/yangxinpython/p/12825470.html
  4. https://github.com/kataras/iris
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值