beego 前后端分离登录验证
conf>app.conf 文件添加一下参数
copyrequestbody=true
sessionon =true
routers>router.go 文件添加初始化路由
func init() {
///api/v1.0/areas
// beego.Router("/api/v1.0/areas", &controllers.AreaController{},"get:GetArea")
beego.Router("api/v1.0/areas", &controllers.LAreaControllers{}, "get:GetArea")
//TODO /api/v1.0/session
//TODO /api/v1.0/houses/index
beego.Router("/api/v1.0/session",&controllers.SessionController{},"get:GetSessionData;delete:DeleteSessionData")
beego.Router("/api/v1.0/sessions",&controllers.SessionController{},"post:Login")
beego.Router("/api/v1.0/houses/index",&controllers.HouseIndexController{},"get:GetHouseIndex")
beego.Router("/api/v1.0/users",&controllers.UserController{},"post:Reg")
}
models>recode.go 错误代码编码
package models const (
RECODE_OK = ""
RECODE_DBERR = ""
RECODE_NODATA = ""
RECODE_DATAEXIST = ""
RECODE_DATAERR = ""
RECODE_SESSIONERR = ""
RECODE_LOGINERR = ""
RECODE_PARAMERR = ""
RECODE_USERERR = ""
RECODE_ROLEERR = ""
RECODE_PWDERR = ""
RECODE_REQERR = ""
RECODE_IPERR = ""
RECODE_THIRDERR = ""
RECODE_IOERR = ""
RECODE_SERVERERR = ""
RECODE_UNKNOWERR = ""
) var recodeText = map[string]string{
RECODE_OK: "成功",
RECODE_DBERR: "数据库查询错误",
RECODE_NODATA: "无数据",
RECODE_DATAEXIST: "数据已存在",
RECODE_DATAERR: "数据错误",
RECODE_SESSIONERR: "用户未登录",
RECODE_LOGINERR: "用户登录失败",
RECODE_PARAMERR: "参数错误",
RECODE_USERERR: "用户不存在或未激活",
RECODE_ROLEERR: "用户身份错误",
RECODE_PWDERR: "密码错误",
RECODE_REQERR: "非法请求或请求次数受限",
RECODE_IPERR: "IP受限",
RECODE_THIRDERR: "第三方系统错误",
RECODE_IOERR: "文件读写错误",
RECODE_SERVERERR: "内部错误",
RECODE_UNKNOWERR: "未知错误",
} func RecodeText(code string)string {
str,ok := recodeText[code]
if ok {
return str
}
return RecodeText(RECODE_UNKNOWERR)
}
controllers>User.go 用户注册
package controllers import (
"encoding/json"
"github.com/astaxie/beego"
"github.com/astaxie/beego/orm"
"lovehome/models"
) type UserController struct {
beego.Controller
} func (c *UserController) Get() {
c.Data["Website"] = "beego.me"
c.Data["Email"] = "astaxie@gmail.com"
c.TplName = "index.tpl"
}
func (c *UserController) Reg() { resp :=make(map[string]interface{})
defer c.RetData(resp) //TODO 获取前端传过来的json的数据
json.Unmarshal(c.Ctx.Input.RequestBody,&resp)
//beego.Info(resp)
//TODO 封装成结构体
o := orm.NewOrm()
user := models.User{}
user.Mobile = resp["mobile"].(string)
user.Name = resp["mobile"].(string)
user.Password_hash = resp["password"].(string)
id,err :=o.Insert(&user)
if err != nil{
resp["errno"]=models.RECODE_NODATA
resp["errmsg"]=models.RecodeText(models.RECODE_NODATA)
return
}
beego.Info("reg success,id=",id)
resp["errno"]=models.RECODE_OK
resp["errmsg"]=models.RecodeText(models.RECODE_OK)
c.SetSession("name",user.Name) } func (c *UserController) RetData(resp map[string]interface{}) {
c.Data["json"] =resp
c.ServeJSON()
}
controllers>Session.go 登录
package controllers import (
"encoding/json"
"github.com/astaxie/beego"
"github.com/astaxie/beego/orm"
"lovehome/models"
) type SessionController struct {
beego.Controller
} func (c *SessionController) Get() {
c.Data["Website"] = "beego.me"
c.Data["Email"] = "astaxie@gmail.com"
c.TplName = "index.tpl"
}
//TODO 获取Session
func (c *SessionController) GetSessionData() {
beego.Info("connect success")
resp :=make(map[string]interface{})
defer c.RetData(resp)
user := models.User{}
//user.Name="浩秦" resp["errno"] =
resp["errmsg"] = "数据获取失败"
name := c.GetSession("name")
if name!=nil {
user.Name = name.(string)
resp["errno"] =
resp["mrrmsg"] = "ok"
resp["data"] = user
}
} //TODO 删除对应的Session
func (c *SessionController) DeleteSessionData() {
resp := make(map[string]interface{})
defer c.RetData(resp)
c.DelSession("name")
resp["errno"]=
resp["errmsg"]="ok"
}
// TODO 登录
func (c *SessionController) Login() { resp := make(map[string]interface{})
defer c.RetData(resp) //得到用户信息获取前端传递过来的json数据
json.Unmarshal(c.Ctx.Input.RequestBody,&resp)
beego.Info(&resp)
//判断是否合法
if resp["mobile"] == nil || resp["password"] ==nil{
resp["errno"]=models.RECODE_DATAERR
resp["errmsg"]=models.RecodeText(models.RECODE_DATAERR)
return
}
//与数据库匹配账号密码是否正确
o := orm.NewOrm()
user := models.User{Name:resp["mobile"].(string)}
moble := resp["mobile"].(string)
qs := o.QueryTable("user")
err := qs.Filter("mobile",moble).One(&user)
if err !=nil {
resp["errno"]=models.RECODE_DATAERR
resp["errmsg"]=models.RecodeText(models.RECODE_DATAERR)
beego.Info("2222name=",resp["mobile"],"========password====",resp["password"]) return
}
if user.Password_hash != resp["password"] {
resp["errno"]=models.RECODE_DATAERR
resp["errmsg"]=models.RecodeText(models.RECODE_DATAERR)
beego.Info("3333name=",resp["mobile"],"========password====",resp["password"])
return
}
//添加Session
c.SetSession("name",resp["mobile"])
c.SetSession("mobile",resp["mobile"])
c.SetSession("user_id",user.Id)
//返回json数据给前端
resp["errno"]=models.RECODE_OK
resp["errmsg"]=models.RecodeText(models.RECODE_OK) }
func (c *SessionController) RetData(resp map[string]interface{}) {
c.Data["json"] =resp
c.ServeJSON()
}
controllers>area.go
package controllers import (
"github.com/astaxie/beego"
"github.com/astaxie/beego/orm"
"lovehome/models"
) type LAreaControllers struct {
beego.Controller
} func (c *LAreaControllers) Get() {
c.Data["Website"] = "beego.me"
c.Data["Email"] = "astaxie@gmail.com"
c.TplName = "index.tpl"
}
func (c *LAreaControllers) GetArea() {
beego.Info("connect success")
resp :=make(map[string]interface{})
resp["errno"]=
resp["errmsg"]="ok"
defer c.RetData(resp) //TODO 从MySQL里面读取数据
var areas []models.Area
o := orm.NewOrm()
num,err := o.QueryTable("area").All(&areas)
if err != nil {
resp["errno"]=
resp["errmsg"]="数据库查询失败"
return
}
if num == {
resp["errno"]=
resp["errmsg"]="没有查到数据"
}
//TODO 打包成json返回给前端
resp["data"]=areas
beego.Info("query data sucess,resp=",resp,"num=",num)
} func (c *LAreaControllers) RetData(resp map[string]interface{}) {
c.Data["json"] =resp
c.ServeJSON()
}
main.go beego前后端分离静态页面承载有点费劲,不过也好只是比gin多几句代码而已
package main import (
_ "lovehome/routers"
_ "lovehome/models"
"github.com/astaxie/beego" "github.com/astaxie/beego/context"
"net/http"
"strings"
) func main() {
ignoreStaticPath()
beego.Run()
} func ignoreStaticPath() {
beego.InsertFilter("/",beego.BeforeRouter,TransparentStatic)
beego.InsertFilter("/*",beego.BeforeRouter,TransparentStatic)
} func TransparentStatic(ctx *context.Context){
orpath := ctx.Request.URL.Path
beego.Info("request url:",orpath)
//如果请求url包含api字段,说明指令应该取消静态资源重定向
if strings.Index(orpath,"api") >= {
return
} http.ServeFile(ctx.ResponseWriter,ctx.Request,"static/html/"+ctx.Request.URL.Path) }
beego 前后端分离登录验证的更多相关文章
- 七:Spring Security 前后端分离登录,非法请求直接返回 JSON
Spring Security 前后端分离登录,非法请求直接返回 JSON 解决方案 在 Spring Security 中未获认证的请求默认会重定向到登录页,但是在前后端分离的登录中,这个默认行为则 ...
- Spring Security 前后端分离登录,非法请求直接返回 JSON
hello 各位小伙伴,国庆节终于过完啦,松哥也回来啦,今天开始咱们继续发干货! 关于 Spring Security,松哥之前发过多篇文章和大家聊聊这个安全框架的使用: 手把手带你入门 Spring ...
- nginx-springboot-vue前后端分离跨域配置
nginx-springboot-vue前后端分离跨域配置 引言 接着上篇--简单的springboot-vue前后端分离登录Session拦截的demo,其中跨域是通过springboot后端全局设 ...
- SpringBootSecurity学习(13)前后端分离版之JWT
JWT 使用 前面简单介绍了把默认的页面登录改为前后端分离的接口异步登录的方法,可以帮我们实现基本的前后端分离登录功能.但是这种基本的登录和前面的页面登录还有一个一样的地方,就是使用session和c ...
- SpringBoot20 集成SpringSecurity02 -> 利用SpringSecurity进行前后端分离的登录验证
1 SpirngBoot环境搭建 创建一个SpringBoot项目即可,详情参见三少的相关博文 参考博文 -> 点击前往 SpirngBoot项目脚手架 -> 点击前往 2 引入Spirn ...
- springboot 前后端分离开发 从零到整(三、登录以及登录状态的持续)
今天来写一下怎么登录和维持登录状态. 相信登录验证大家都比较熟悉,在Javaweb中一般保持登录状态都会用session.但如果是前后端分离的话,session的作用就没有那么明显了.对于前后端分离的 ...
- shiro,基于springboot,基于前后端分离,从登录认证到鉴权,从入门到放弃
这个demo是基于springboot项目的. 名词介绍: ShiroShiro 主要分为 安全认证 和 接口授权 两个部分,其中的核心组件为 Subject. SecurityManager. Re ...
- Session与Token认证机制 前后端分离下如何登录
字号 1 Web登录涉及到知识点 1.1 HTTP无状态性 HTTP是无状态的,一次请求结束,连接断开,下次服务器再收到请求,它就不知道这个请求是哪个用户发过来的.当然它知道是哪个客户端地址发过来的 ...
- springboot-vue前后端分离session过期重新登录
springboot-vue前后端分离session过期重新登录 简单回顾cookie和session cookie和session都是回话管理的方式 Cookie cookie是浏览器端存储信息的一 ...
随机推荐
- 物流管理系统(SSM+vue+shiro)【前后台】
一.简单介绍项目 该项目是属于毕业设计项目之一,有前台的用户下单.有司机进行接单.有管理员进行操作后台,直接进入主题 毕设.定制开发 联系QQ:761273133 登录主页: 手机号码+验证码登录 或 ...
- ubuntu classicmenu-indicator
sudo add-apt-repository ppa:diesch/testing sudo apt-get update sudo apt-get install classicmenu-in ...
- BUAAOO-Final-Summary
目录 总结本单元两次作业的架构设计 总结自己在四个单元中架构设计及OO方法理解的演进 总结自己在四个单元中测试理解与实践的演进 总结自己的课程收获 立足于自己的体会给课程提三个具体改进建议 两次架构设 ...
- 2019年北航OO第三次博客总结
一.JML语言理论基础及其工具链 1. JML语言理论基础 JML是用于对Java程序进行规格化设计的一种表示语言,是一种行为接口规格语言(Behavior Interface Specificati ...
- Synchronized 和 Lock 的主要区别(转)
Synchronized 和 Lock 的主要区别Synchronzied 和 Lock 的主要区别如下: 存在层面:Syncronized 是Java 中的一个关键字,存在于 JVM 层面,Lock ...
- PHP 结合 Boostrap 结合 js 实现学生列表删除编辑以及搜索功能(完结)
这个自己的小项目要先告一段落了.可能还有许多bug.请见谅 删除学生功能 PHP: // 这里是通过前端代码HTML中的 url 传过来的,用 $_GET 来获取(相关HTML代码可以看一下到主页看一 ...
- C# NPOI Excel 合并单元格和取消单元格
1.合并单元操作 //合并单元格 /** 第一个参数:从第几行开始合并 第二个参数:到第几行结束合并 第三个参数:从第几列开始合并 第四个参数:到第几列结束合并 **/ CellRangeAddres ...
- uboot使用脚本
使用mkimage命令 # mkimage -A ARM -O linux -T script -C none -n "script" -d *.sh *.img # tftp x ...
- ET·ci — 全自动软件测试调度(持续集成)平台
ET·ci 提供了编译-测试-发布解决方案,包括:自动提取配置库代码进行自动构建, 自动调度静态测试工具(如QAC)进行静态测试,自动调度单元测试工具(如Tessy)开展动态测试,自动 ...
- 开发指南~小程序代码构成~JSON配置
2.1 JSON 配置 JSON 是一种数据格式,并不是编程语言,在小程序中,JSON扮演的静态配置的角色. 2.1.1 一个例子 先看一个例子,打开开发工具的编辑器,在根目录下可以找到 app.j ...