仅作简单逻辑处理以走通流程,无阅读难度,前端模板采用Xadmin2.0的login.html,直接贴代码:
数据表user结构:
控制器login.go:
package controllers
import (
"github.com/astaxie/beego"
"github.com/astaxie/beego/orm"
"testbeego/models"
)
type LoginController struct {
beego.Controller
CommentController
}
func (c *LoginController) Login() {
c.TplName = "login.html"
}
func (c *LoginController) LoginCheck(){
ReturnData := make(map[string]interface{})
var user models.User
account := c.Input().Get("account")
password := c.Input().Get("password")
o := orm.NewOrm()
user.Account = account
err := o.Read(&user,"account")
if err == orm.ErrNoRows{
ReturnData["status"] = -1
ReturnData["message"] = "账号不存在"
}else if err != nil{
ReturnData["status"] = -3
ReturnData["message"] = "数据库查询错误:"+err.Error()
}else{
if password == user.Password{
ReturnData["status"] = 1
ReturnData["message"] = "登录成功"
c.SetSession("userId",user.Id)
} else{
ReturnData["status"] = -2
ReturnData["message"] = "密码错误"
}
}
c.Data["json"] = ReturnData
c.ServeJSON()
c.StopRun()
}
模型user.go:
package models
type User struct {
Id int `json:"id" orm:"column(id)"`
Account string `json:"account" orm:"column(account)"`
Password string `json:"password" orm:"column(password)"`
CreateTime int `json:"create_time" orm:"column(create_time)"`
UpdateTime int `json:"update_time" orm:"column(update_time)"`
Status int `json:"status" orm:"column(status)"`
}
前端页面login.html:
<!doctype html>
<html class="x-admin-sm">
<head>
<meta charset="UTF-8">
<title>Demo登录</title>
<meta name="renderer" content="webkit|ie-comp|ie-stand">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="viewport" content="width=device-width,user-scalable=yes, minimum-scale=0.4, initial-scale=0.8,target-densitydpi=low-dpi" />
<meta http-equiv="Cache-Control" content="no-siteapp" />
<link rel="stylesheet" href="/static/xadmin2.0/css/font.css">
<link rel="stylesheet" href="/static/xadmin2.0/css/login.css">
<link rel="stylesheet" href="/static/xadmin2.0/css/xadmin.css">
<script src="/static/js/jquery-3.3.1.min.js" charset="utf-8"></script>
<script src="/static/js/jquery.cookie.js" charset="utf-8"></script>
<script src="/static/xadmin2.0/lib/layui/layui.js" charset="utf-8"></script>
</head>
<body class="login-bg">
<div class="login layui-anim layui-anim-up">
<div class="message">Demo登录</div>
<div id="darkbannerwrap"></div>
<form method="post" class="layui-form" id="login">
<input name="account" placeholder="请输入账号" type="text" class="layui-input" onkeydown="if(event.keyCode==13){document.getElementById('loginbtn').click();return false;}" >
<hr class="hr15">
<input name="password" placeholder="请输入密码" type="password" class="layui-input" onkeydown="if(event.keyCode==13){document.getElementById('loginbtn').click();return false;}" >
<hr class="hr15">
<input value="登录" lay-submit lay-filter="loginbtn" id="loginbtn" style="margin-top: 15px; width:100%;" type="button">
<hr class="hr20" >
<input value="注册账号" onclick="window.location.href='/register'" style="margin-top: 15px; width:100%;" type="button">
</form>
</div>
<script src="/static/lib/layui/layui.js" charset="utf-8">
</script>
<script src="/static/js/x-layui.js" charset="utf-8">
</script>
<script type="text/javascript">
layui.use(['form','layer'], function(){
$ = layui.jquery;
var form = layui.form()
,layer = layui.layer;
form.on('submit(loginbtn)', function(data){
$.ajax(
{
type:'post',
url: "login/logincheck",
data: $('#login').serialize(),
dataType: 'json',
beforeSend: function () {
$("#loginbtn").attr({ disabled:true });
},
success: function(returndata){
if(returndata.status!==1)
layer.alert(returndata.message, {icon: 5},function (thiswindow) {
layer.close(thiswindow);
$("#loginbtn").attr({ disabled:false});
});
if(returndata.status==1)
layer.alert(returndata.message, {icon: 6},function (thiswindow) {
layer.close(thiswindow);
window.location.href = "/index";
});
},
error: function () {
$("#loginbtn").attr({ disabled:false});
layer.alert('请求错误,请稍后再试',{icon: 5});
}
}
)
});
});
</script>
</body>
</html>
基类控制器base.go:
package controllers
import (
"github.com/astaxie/beego"
)
type BaseController struct {
beego.Controller
}
type JsonReturn struct {
Msg string `json:"msg"`
Code int `json:"code"`
Data interface{} `json:"data"`
}
func (c *BaseController) ApiJsonReturn(msg string,code int,data interface{}) {
var JsonReturn JsonReturn
JsonReturn.Msg = msg
JsonReturn.Code = code
JsonReturn.Data = data
c.Data["json"] = JsonReturn
c.ServeJSON()
c.StopRun()
}
func (c *BaseController) Prepare() {
controller,action := c.Controller.GetControllerAndAction()
userId := c.GetSession("userId")
if userId == nil{
c.Ctx.Redirect(302,"/login")
}
}
入口main.go:
package main
import (
"github.com/astaxie/beego"
"github.com/astaxie/beego/orm"
_ "github.com/go-sql-driver/mysql"
"testbeego/models"
_ "testbeego/routers"
)
func main() {
registerModel()
sessionConfig()
ormConfig()
beego.Run()
}
func registerModel() {
orm.RegisterModel(new(models.User))
}
func sessionConfig() {
beego.BConfig.WebConfig.Session.SessionOn = true
beego.BConfig.WebConfig.Session.SessionGCMaxLifetime = 86400
}
func ormConfig() {
_ = orm.RegisterDriver("mysql", orm.DRMySQL)
_ = orm.RegisterDataBase("default", "mysql", "root:jx5333136@/testbeego?charset=utf8")
}