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 协议》,转载必须注明作者和本文链接