golang Iris 实现登录踢人功能 (挤号)

1.1利用session实现踢人功能user_controller.go

import (
        "github.com/1324204490/tool/tool/transcoding"
        "github.com/kataras/iris"
        "github.com/kataras/iris/sessions"
        "github.com/spf13/cast"
        "math/rand"
    )
    var (
        cookieNameForSessionID = "mycookiesessionnameid"
        Sess                   = sessions.New(sessions.Config{Cookie: cookieNameForSessionID})
    )
    type UserController struct {
       Ctx iris.Context\
    }
    //登录接口
    func (c *UserController) PostLogin() string {
     //随机生成一串数字 转成字符串后加密
    i := rand.Int()
    s := transcoding.StrToMd5(cast.ToString(i))
    //key可以是用户名 要确保唯一性,也可以是用户ID
    session := Sess.Start(c.Ctx)
    session.Set("zzy", s)
    //将生成的session设置到响应头里,验证的时候需要前端放到请求头里
    c.Ctx.Header("session", s)
}

1.2利用session实现踢人功能main.go

import (\
   "fmt"\
 "github.com/iris-contrib/middleware/cors" 
 "github.com/kataras/iris"
 "github.com/kataras/iris/middleware/logger"
 "github.com/kataras/iris/mvc"
 "session/controllers"
 )
func main() {
   app := *iris.New()
   //跨域请求
   crs := cors.New(cors.Options{
      AllowedOrigins:   []string{"*"}, // allows everything, use that to change the hosts.
  AllowCredentials: true,
      AllowedHeaders:   []string{"*"},
   })
   //注册到中间件中
   app.Use(iris.Gzip, logger.New(), crs, Session)
   app.AllowMethods(iris.MethodOptions)
   //日志打印
   app.Logger().SetLevel("debug")
   mvc.New(app.Party("/user")).Handle(&controllers.UserController{})
   app.Run(iris.Addr(":" + "11112"))
}
//验证session的方法
func Session(Ctx iris.Context) {
    //除了登录接口以外,其他接口都需要进行session验证
    if ctx.Path() != "/user/login" {
        // 检查用户是否已通过身份验证
        s :=  controllers.Sess.Start(ctx).Get("zzy")
        if s == nil {
            ctx.StatusCode(512)
            return 
        }
        //获取请求头里的session,如果与内置的session一致则通过校验
        e := ctx.Request().Header.Get("zzy")
        if s == e == false {
            ctx.StatusCode(512)
            return
        }
    }
    ctx.Next()
}
本作品采用《CC 协议》,转载必须注明作者和本文链接
ZyAng
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!