golang Iris 實現登入踢人功能 (擠號)

ZyAng發表於2019-05-13

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.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()
}

相關文章