手摸手教你用beego实现留言本之三(实现登录和退出)

wujiangwei · · 1158 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

> 登录和退出的流程: 1. 输入用户名、密码传到后台 2. 数据库查询结果是否匹配 3. 匹配成功保存 session 跳转首页 4. 退出登录 删除session 这里用到了beego的三个知识点:session | 数据库查询 | 跳转 ### 1. 设置session >首先,我们需要开启 session,在文件 app.conf 中加入 ``` sessionon = true ``` 如果未开启直接访问session可能会报如下错误: ``` goblog:runtime error: invalid memory address or nil pointer dereference ``` #### 1.1 设置session 这里提到的变量 `c` 即是控制器中传入的指针对象 ```go c.SetSession("Username","bego") ``` #### 1.2 获取session ```go c.GetSession("Username") ``` #### 1.3 删除session ```go c.DelSession("Username") ``` session的详细讲解参见:https://www.kancloud.cn/hello123/beego/126126 ### 2. 跳转重定向 > 我们查询到 beego 的跳转在控制器中已经封装好了,直接调用就好 ```go func (c *MainController) Get() { username := c.GetSession("Username") if username == nil { c.Redirect("/user/login",302) return } //other code } ``` 更多细节参见跳转重定向:https://www.kancloud.cn/hello123/beego/126123 ### 3. 数据库读取 > 这里我们用到了 `orm` 的 `Read` 方法,需要一个'User' 指针,并使用字段 `name`、`password` 匹配 ```go func (user User) GerOne() (int,error) { orm.Debug = true o := orm.NewOrm() if err := o.Read(&user,"name","password"); err != nil || user.Id <= 0 { return 0, errors.New("用户名或密码错误") } else { return user.Id,nil } } ``` 更多数据库查询细节参见:https://www.kancloud.cn/hello123/beego/126104 ### 4. 代码实例(核心部分) #### 4.1 访问首页 路由 ```go beego.Router("/", &controllers.MainController{}) ``` 模板 ```html <div class="description"> 欢迎回来,{{.Username}} <button class="btn btn-default" onclick="logout()">退出</button> </div> <script> //登出功能 function logout(){ $.ajax({ type:'post', url:'/user/logout', data:{}, success:function(result){ if(result.State > 0){ alert(result.Message) }else { alert("退出成功"); location.href = "/" } } }) } </script> ``` 控制器 ```go func (c *MainController) Get() { username := c.GetSession("Username") if username == nil { c.Redirect("/user/login",302) return } c.Data["Username"] = username c.TplName = "index.tpl" } ``` #### 4.2 登录页 路由 ```go beego.Router("/user/login", &controllers.UserController{},"get:Login") beego.Router("/user/sign", &controllers.UserController{},"post:Sign") beego.Router("/user/logout", &controllers.UserController{},"post:Logout") ``` 模板 ```html <div class="container"> <div class="form-group"> <label for="text">用户名:</label> <input type="text" class="form-control" id="name" placeholder="用户名"> </div> <div class="form-group"> <label for="text">密码:</label> <input type="password" class="form-control" id="password" placeholder="密码"> </div> <div class="form-group"> <button class="btn btn-primary" onclick="login()">登陆</button> <button class="btn btn-primary" onclick="register()">注册</button> </div> </div> <script type="text/javascript"> //登陆功能 function login(){ $.ajax({ type:'post', url:'/user/sign', data:{ "name":$("#name").val(), "password":$("#password").val() }, success:function(result){ if(result.State > 0){ alert(result.Message) }else { alert("登录成功"); location.href = "/" } } }) } function register() { location.href = "/user/register" } </script> ``` 控制器 ```go func (c *UserController) Login() { c.TplName = "login.tpl" } func (c *UserController) Sign() { user := models.User{} user.Name = c.Input().Get("name") user.Password = c.Input().Get("password") response := ResponseJson{State:0,Message:"ok"} if user.Name == "" || user.Password == ""{ response.State = 500 response.Message = "用户名或密码不能为空" }else { if id,err := user.GerOne(); err != nil || id == 0 { response.State = 500 response.Message = err.Error() } else { c.SetSession("Username",user.Name) } } c.Data["json"] = response c.ServeJSON() } func (c *UserController) Logout() { c.DelSession("Username") response := ResponseJson{State:0,Message:"ok"} c.Data["json"] = response c.ServeJSON() } ``` 模型 ```go /** 查询单个用户信息 */ func (user User) GerOne() (int,error) { orm.Debug = true o := orm.NewOrm() if err := o.Read(&user,"name","password"); err != nil || user.Id <= 0 { return 0, errors.New("用户名或密码错误") } else { return user.Id,nil } } ``` 项目所在github地址:https://github.com/wujiangweiphp/beegostudy

有疑问加站长微信联系(非本文作者))

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1158 次点击  
加入收藏 微博
被以下专栏收入,发现更多相似内容
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传