> 登錄頁比較簡單,只有用戶名和密碼,暫時沒有連接數據庫,使用一個簡單的固定驗證
> 用戶名:admin 密碼:123456

## 第1步
修改應用配置(conf/app.conf)如下
~~~
appname = beego_blog
httpaddr = 127.0.0.1
httpport = 3000
runmode = dev
~~~
## 第2步
用戶登錄涉及到session,這里先在**main.go**文件里**啟用session**
~~~
package main
import (
_ "beego_blog/routers" // _可以理解成占位符,也可以理解成忽略這個變量
"github.com/astaxie/beego"
)
func main() {
// 啟用session
beego.BConfig.WebConfig.Session.SessionOn = true
beego.Run()
}
~~~
session的相關方法:
~~~
// 設置session
c.SetSession(key, value)
// 獲取session
c.GetSession(key)
// 刪除指定session
c.DelSession(key)
// 銷毀session
c.DestroySession()
~~~
## 第3步
**添加路由**,跳轉登錄頁、處理登錄和退出登錄
~~~
package routers
import (
"beego_blog/controllers"
"github.com/astaxie/beego"
)
func init() {
beego.Router("/", &controllers.MainController{})
beego.Router("/login", &controllers.LoginController{})
beego.Router("/handleLogin", &controllers.LoginController{}, "post:HandleLogin")
beego.Router("/logout", &controllers.LoginController{}, "get:Logout")
}
~~~
## 第4步
接下來,創建**登錄控制器controllers/login.go**,處理登錄相關邏輯,代碼如下:
~~~
package controllers
import (
"github.com/astaxie/beego"
)
type LoginController struct {
beego.Controller
}
func (c *LoginController) Get() {
c.TplName = "login.tpl"
}
// 處理登錄
func (c *LoginController) HandleLogin() {
username, password := c.GetString("username"), c.GetString("password")
if username == "admin" && password == "123456" {
c.SetSession("username", username)
c.Data["json"] = map[string]interface{}{"status": true, "msg": "登錄成功~"}
} else {
c.Data["json"] = map[string]interface{}{"status": false, "msg": "登錄失敗~"}
}
c.ServeJSON()
}
// 退出登錄
func (c *LoginController) Logout() {
c.DelSession("username")
c.Ctx.Redirect(302, "/login")
}
~~~
重定向:
> c.Ctx.Redirect(code, url)
## 第5步
再添加**登錄模板view/login.tpl**(使用了layui布局和驗證+ajax提交的方式)
~~~
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>登錄</title>
<link rel="stylesheet" href="/static/layui-v2.3.0/css/layui.css">
</head>
<body>
<div class="layui-row">
<div class="layui-col-lg4"> </div>
<div class="layui-col-lg4">
<fieldset class="layui-elem-field layui-field-title" style="margin-top: 20px;">
<legend>登錄</legend>
</fieldset>
<div class="layui-form">
<div class="layui-form-item">
<label class="layui-form-label">用戶名</label>
<div class="layui-input-block">
<input type="text" name="username" lay-verify="username" autocomplete="off" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">密碼</label>
<div class="layui-input-block">
<input type="password" name="password" lay-verify="password" autocomplete="off" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label"></label>
<button class="layui-btn layui-btn-normal" lay-submit lay-filter="login" type="button">登錄</button>
</div>
</div>
</div>
</div>
<script src="/static/js/vendor/jquery-3.3.1.min.js"></script>
<script src="/static/layui-v2.3.0/layui.js"></script>
<script>
layui.use(['layer', 'form'], function(layer, form){
// 驗證
form.verify({
username: function(value){
if(!value.trim()){
return '用戶名沒有填寫~';
}
},
password: [/(.+){6,12}$/, '密碼必須6到12位~']
});
// 登錄提交
form.on('submit(login)', function(res) {
$.ajax({
type: 'post',
url: '/handleLogin',
data: res.field,
success: function(res) {
if(res.status) {
layer.msg(res.msg, {time: 1000, icon: 6}, function() {
location.href = '/';
});
} else {
layer.msg(res.msg, {time: 1500, icon: 5});
}
},
error: function() {
console.warn('request interface is failure.');
}
})
});
});
</script>
</body>
</html>
~~~
這樣一個超簡單的登錄就完成了,既然上面提了session,那么我們就來使用session做訪問控制
## 第6步
需要在controllers/default.go來驗證是否設置了session(如果設置了就跳轉到首頁,沒有就跳轉到登錄頁)
~~~
package controllers
import (
"fmt"
"github.com/astaxie/beego"
)
type MainController struct {
beego.Controller
}
func (c *MainController) Get() {
c.Data["title"] = "首頁"
username := c.GetSession("username")
fmt.Println(username)
if username != nil {
c.Data["username"] = username
c.TplName = "index.tpl"
} else {
c.TplName = "login.tpl"
}
}
~~~
## 第7步
然后在退出登錄的時候,把session刪掉,修改首頁模板(views/index.tpl)如下
~~~
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
{{.title}}
<a href="/logout">退出登錄</a>
</body>
</html>
~~~
模板引擎語法:https://beego.me/docs/mvc/view/template.md
到此結束~
后面會加一個連接數據庫的操作。。