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 前后端分离登录验证的更多相关文章

  1. 七:Spring Security 前后端分离登录,非法请求直接返回 JSON

    Spring Security 前后端分离登录,非法请求直接返回 JSON 解决方案 在 Spring Security 中未获认证的请求默认会重定向到登录页,但是在前后端分离的登录中,这个默认行为则 ...

  2. Spring Security 前后端分离登录,非法请求直接返回 JSON

    hello 各位小伙伴,国庆节终于过完啦,松哥也回来啦,今天开始咱们继续发干货! 关于 Spring Security,松哥之前发过多篇文章和大家聊聊这个安全框架的使用: 手把手带你入门 Spring ...

  3. nginx-springboot-vue前后端分离跨域配置

    nginx-springboot-vue前后端分离跨域配置 引言 接着上篇--简单的springboot-vue前后端分离登录Session拦截的demo,其中跨域是通过springboot后端全局设 ...

  4. SpringBootSecurity学习(13)前后端分离版之JWT

    JWT 使用 前面简单介绍了把默认的页面登录改为前后端分离的接口异步登录的方法,可以帮我们实现基本的前后端分离登录功能.但是这种基本的登录和前面的页面登录还有一个一样的地方,就是使用session和c ...

  5. SpringBoot20 集成SpringSecurity02 -> 利用SpringSecurity进行前后端分离的登录验证

    1 SpirngBoot环境搭建 创建一个SpringBoot项目即可,详情参见三少的相关博文 参考博文 -> 点击前往 SpirngBoot项目脚手架 -> 点击前往 2 引入Spirn ...

  6. springboot 前后端分离开发 从零到整(三、登录以及登录状态的持续)

    今天来写一下怎么登录和维持登录状态. 相信登录验证大家都比较熟悉,在Javaweb中一般保持登录状态都会用session.但如果是前后端分离的话,session的作用就没有那么明显了.对于前后端分离的 ...

  7. shiro,基于springboot,基于前后端分离,从登录认证到鉴权,从入门到放弃

    这个demo是基于springboot项目的. 名词介绍: ShiroShiro 主要分为 安全认证 和 接口授权 两个部分,其中的核心组件为 Subject. SecurityManager. Re ...

  8. Session与Token认证机制 前后端分离下如何登录

     字号 1 Web登录涉及到知识点 1.1 HTTP无状态性 HTTP是无状态的,一次请求结束,连接断开,下次服务器再收到请求,它就不知道这个请求是哪个用户发过来的.当然它知道是哪个客户端地址发过来的 ...

  9. springboot-vue前后端分离session过期重新登录

    springboot-vue前后端分离session过期重新登录 简单回顾cookie和session cookie和session都是回话管理的方式 Cookie cookie是浏览器端存储信息的一 ...

随机推荐

  1. Oracle——无法在查询中执行 DML 操作

    今天在调用Oracle Function遇到一个异常

  2. ASP.NET Core在支付宝小程序中使用signalR

    Github有一个经过重写的微信小程序SignalR的js类库 https://github.com/liangshiw/SignalRMiniProgram-Client 于是我把他改成支付宝小程序 ...

  3. NEST analyze与mapping

    /// <summary> /// POST /_analyze?pretty=true /// POST /employee/_analyze /// </summary> ...

  4. MySQL的ERROR 1205错误分析

    一.错误发生及原因猜测 1.错误发生 在删除 t_user 表的一条数据时,Navicat 发生长时间的无响应,然后弹出一个对话框,提示:ERROR 1205: Lock wait timeout e ...

  5. Java调用Http/Https接口(1)--编写服务端

    Http接口输入的数据一般是键值对或json数据,返回的一般是json数据.本系列文章主要介绍Java调用Http接口的各种方法,本文主要介绍服务端的编写,方便后续文章里的客户端的调用.文中所使用到的 ...

  6. 兴奋与沮丧并存spider爬取拉勾网

    兴奋的开发除了爬取拉勾网的爬虫信息,可是当调试都成功了的那一刻,我被拉钩封IP了. 下面是spider的主要内容 import reimport scrapy from bs4 import Beau ...

  7. win10远程桌面 CredSSP加密Oracle修正的解决办法

    小编在登录远程桌面的时候一直显示由于CredSSP加密Oracle修正 的警告,连接不上.最终通过以下办法解决了 首先点击windows+R键 输入gpedit.msc,点击确定. 然后依次选择:计算 ...

  8. python3基础之“小练习(3)”

    (二十四)将字符串"A screaming comes across the sky."中所有的"s"字符替换为美元符号. # a="A scream ...

  9. layui.table前端+后台处理+分页

    前端 注:监听工具条没有详细写,但路子一样的 @section head{ <script src="~/Content/jquery-easyui-1.5.5.4/jquery.ea ...

  10. 快速搭建Kerberos服务端及入门使用

    快速搭建Kerberos服务端及入门使用 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. Kerberos是一种网络身份验证协议.它旨在通过使用秘密密钥加密为客户端/服务器应用程序提 ...