网站实现一个全局的方法,实现导航栏显示登陆注册按钮或者登录用户的信息

网站要实现用户的登陆和注册,登陆之后导航栏不再显示登陆注册按钮,而显示用户的信息(比如用户名称),现在已经实现用户登陆后把用户信息放在session里面,怎么实现一个全局的方法(用来的header页面判断用户是否登录,显示相应的信息)?如果描述的不够清晰,还请见谅。

已邀请:

Rickyshi

赞同来自: astaxie lychee

如果是beego的话建议建立一个baseController, 其他所有的controller都是继承base,在base的init去判断session状态,可以放入c.data[user]中。那么只要建立一个公共的head.tpl,任何问好include了head就可以利用baseConteoller里面的user去判断登录信息了。如果需要可以给你贴一些代码 @astaxie请补充

lychee

赞同来自:

@Rickyshi 求实现代码

hunterhug - https://github.com/hunterhug年后找工作,准备深飘

赞同来自:

我的代码片段:


func init() {
AccessRegister()
}

//check access and register user's nodes
func AccessRegister() {
var Check = func(ctx *context.Context) {
user_auth_type, _ := strconv.Atoi(beego.AppConfig.String("user_auth_type"))
rbac_auth_gateway := beego.AppConfig.String("rbac_auth_gateway")
var accesslist map[string]bool
if user_auth_type > 0 {
params := strings.Split(strings.ToLower(ctx.Request.RequestURI), "/")
if CheckAccess(params) {
uinfo := ctx.Input.Session("userinfo")
if uinfo == nil && beego.AppConfig.String("cookie7") == "1" {
arr := strings.Split(ctx.GetCookie("auth"), "|")
if len(arr) == 2 {
idstr, password := arr[0], arr[1]
userid, _ := strconv.ParseInt(idstr, 10, 0)
if userid > 0 {
var user m.User
user.Id = userid
if user.Read() == nil && password == Md5(GetClientIp(ctx)+"|"+user.Password) {
uinfo = user

}
}
}
}
if uinfo == nil {
ctx.Redirect(302, rbac_auth_gateway)
return
}else{
//增加sessioN
ctx.Output.Session("userinfo",uinfo)
}
//admin用户不用认证权限
adminuser := beego.AppConfig.String("rbac_admin_user")
if uinfo.(m.User).Username == adminuser {
return
}

if user_auth_type == 1 {
listbysession := ctx.Input.Session("accesslist")
if listbysession != nil {
accesslist = listbysession.(map[string]bool)
} else {
accesslist, _ = GetAccessList(uinfo.(m.User).Id)
}
} else if user_auth_type == 2 {

accesslist, _ = GetAccessList(uinfo.(m.User).Id)
}

ret := AccessDecision(params, accesslist)
if !ret {
ctx.Output.JSON(&map[string]interface{}{"status": false, "info": "权限不足"}, true, false)
}
}

}
}
beego.InsertFilter("/*", beego.BeforeRouter, Check)
}

看最后一句

sheepbao - 流媒体,分布式,即时通信

赞同来自:

有一种认证机制叫JWT,你可以看看

lotus

赞同来自:

beego的话,后端读取session里面的user, c.Data["user"] = user 页面里面加个if判断


{{if .user}}
<div>{{.Username}}</div>
{{else}}
<div><a href="/account/register">注册</a><a href="/account/login">登录</a></div>
{{end}}

要回复问题请先登录注册