🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
## 登录判断 提供两种方法, * 1、控制器和动作名判断,较复杂。 * 2、过滤器函数,简单明了,易用。推荐.... ### 控制器和动作名判断 建立一个AdminBaseController ``` // Controller基类继承封装 type AdminBaseController struct { beego.Controller controllerName string actionName string } // run before get func (p \*AdminBaseController) Prepare() { controllerName, actionName := p.GetControllerAndAction() p.controllerName = strings.ToLower(controllerName\[0 : len(controllerName)-10\]) p.actionName = strings.ToLower(actionName) logs.Info("visited:" + p.controllerName + "/" + p.actionName) // 所有以Admin开头的Controller都进行session判断,所以需要判断的都要以admin开头,如adminarticalController reg := regexp.MustCompile("admin") Cname := reg.FindString(p.controllerName) // fmt.Println(Cname) if Cname == "admin" && p.actionName != "login" { if p.GetSession("username") == nil { logs.Info("login Unauthorized") p.History("未登录", "/login") } } } ``` ### 过滤器函数 在路由中用过滤器函数,在在router.go的init函数中加入以下代码 ``` // 所有以/admin/\*的路由均判断是否有session值 beego.InsertFilter("/admin/\*", beego.BeforeRouter, filterFunc) // session判断结束 ``` 在router.go新建一个filerFunc方法 ``` // 判断session var filterFunc = func(Ctx \*context.Context) { var username = Ctx.Input.Session("username") if username == nil { Ctx.Redirect(302, "/login") } } ```