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是浏览器端存储信息的一 ...
随机推荐
- C#学习笔记------参数
一.形参 形参是本地变量,它声明在方法的参数列表中,而不是方法体中.
- 2.9_Database Interface ADO结构组成及连接方式实例
说通俗点OLE DB和ODBC都是最底层的东西,而ADO对象给我们提供了一个“可视化”和应用层直接交互的组件,ADO对象T通过OLE DB间接取得数据库中的数据,如下图: 从上面看出,可以说ADO是应 ...
- SpringICO和DI区别
学习过Spring框架的人一定都会听过Spring的IoC(控制反转) .DI(依赖注入)这两个概念,对于初学Spring的人来说,总觉得IoC .DI这两个概念是模糊不清的,是很难理解的,今天和大家 ...
- js 简单的滑动1
js 简单的滑动教程(一) 作者:Lellansin 转载请标明出处,谢谢 首先我们要实现一个简单的滑动,三张图.点击左边向左滑动,点右向右滑,碰到临界值的时候就不能滑动. 这个简单滑动的原理是, ...
- dicker第三章--网络管理
- 【转载】 C#使用Math.Round方法对计算结果进行四舍五入操作
在C#的数值运算中,有时候需要对计算结果进行四舍五入操作,此时就可使用内置方法Math.Round方法来实现四舍五入操作,Math.Round方法有多个重载函数,支持设置有效位数进行四舍五入,如果没有 ...
- day30-python之socket
1.iter补充 # l=['a','b','c','d'] # # def test(): # return l.pop() # # x=iter(test,'b') # print(x.__nex ...
- Jmeter学习笔记(七)——监听器元件之察看结果树
在jmeter中,如果我们需要查看请求结果就需要添加查看结果树,这个监听器元件有那些功能呢? 一.察看结果树界面如下 二.察看结果树界面功能说明 1.所有数据写入文件 (1)文件名:可以通过浏览,选择 ...
- RedisCluster的rename机制失败报错,解决又是数据倾斜问题
需求说明:spring session中的用户session更新是更新key的名字,所以对于key的操作时需要用newkey 替换oldkey value值只允许存在一个,这里用到rename就很合适 ...
- ssh修改端口
安装防火墙 sudo yum -y install firewald sudo systemctl start firewald.service sudo firewall-cmd --list-al ...