首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Beego学习——实现用户登录登出

Beego学习——实现用户登录登出

作者头像
传说之下的花儿
发布2023-04-16 14:51:34
6270
发布2023-04-16 14:51:34
举报

controller包

  user.go

import (
	"demo03.cn/models"
	"encoding/json"
	"fmt"
	"github.com/astaxie/beego"
	"github.com/astaxie/beego/orm"
)

type UserController struct {
	beego.Controller
}

func (c *UserController) Reg()  {

	resp :=make(map[string]interface{})
	defer c.RetData(resp)

	//获取前端传过来的json的数据
	_ = json.Unmarshal(c.Ctx.Input.RequestBody,&resp)
	//封装成结构体
	o := orm.NewOrm()
	user := models.User{}
	user.Name = resp["name"].(string)
	user.Password = resp["password"].(string)
	id,err :=o.Insert(&user)
	if err != nil{
		resp["errmsg"]="注册失败"
		return
	}
	resp["errmsg"]=fmt.Sprintf("注册成功,id:%d",id)
	c.SetSession("name",user.Name)
}

// 格式化数据 返回json格式
func (c *UserController) RetData(resp map[string]interface{}) {
	c.Data["json"] =resp
	c.ServeJSON()
}

  session.go

controller session.go

import (
	"demo03.cn/models"
	"encoding/json"
	"github.com/astaxie/beego"
	"github.com/astaxie/beego/logs"
	"github.com/astaxie/beego/orm"
)

type SessionController struct {
	beego.Controller
}

//TODO 获取Session
func (c *SessionController) GetSessionData()  {
	logs.Info("connect success")
	resp :=make(map[string]interface{})
	defer c.RetData(resp)

	user := models.User{}

	session := c.GetSession("name")
	if session!=nil {
		user.Name = session.(string)
		resp["msg"] = "获取成功"
		resp["data"] = user
	}else {
		resp["msg"] = "获取失败"
		logs.Info(user)
	}
}

//删除对应的Session
func (c *SessionController) DeleteSessionData()  {
	resp := make(map[string]interface{})
	defer c.RetData(resp)
	c.DelSession("name")
	resp["msg"]="删除成功"
}

// TODO 登录
func (c *SessionController) Login()  {
	resp := make(map[string]interface{})
	defer c.RetData(resp)

	//得到用户信息获取前端传递过来的json数据
	_ = json.Unmarshal(c.Ctx.Input.RequestBody,&resp)
	logs.Info(&resp)

	//判断是否合法
	if resp["name"] == nil || resp["password"] ==nil{
		resp["msg"]="用户名和密码不可以为空!"
		return
	}
	//与数据库匹配账号密码是否正确
	o := orm.NewOrm()
	user := models.User{Name:resp["name"].(string)}
	name := resp["name"].(string)
	qs := o.QueryTable("user")
	err := qs.Filter("name",name).One(&user)
	if err !=nil {
		resp["msg"]="数据错误"
		logs.Info("2222name=",resp["name"],"password:",resp["password"])
		return
	}
	if user.Password != resp["password"] {
		resp["msg"]="用户名或密码错误"
		logs.Info("3333name=",resp["name"],"password:",resp["password"])
		return
	}
	//添加Session
	c.SetSession("name",resp["name"])
	c.SetSession("user_id",user.Id)
	//返回json数据给前端
	resp["msg"]="登录成功"
}
func (c *SessionController) RetData(resp map[string]interface{}) {
	c.Data["json"] =resp
	c.ServeJSON()
}

models包

  userModel.go

import (
	"github.com/astaxie/beego/orm"
	_ "github.com/go-sql-driver/mysql"
)

type User struct {
	Id       int    `json:"id"`
	Name string `json:"name"`
	Password string `json:"password"`
}

func init() {
	// 映射model数据
	orm.RegisterModel(new(User))
}

router包

  router.go

func init() {
	beego.Router("/user/session",&controllers.SessionController{},"get:GetSessionData;delete:DeleteSessionData")
	beego.Router("/user/sessions",&controllers.SessionController{},"post:Login")
	beego.Router("/user/users",&controllers.UserController{},"post:Reg")
}

main.go

import (
	_ "demo03.cn/routers"
	"github.com/astaxie/beego"
	"github.com/astaxie/beego/context"
	"github.com/astaxie/beego/logs"
	"github.com/astaxie/beego/orm"
	"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){
	// 获取请求的url
	orpath := ctx.Request.URL.Path
	logs.Info("request url:",orpath)
	//如果请求url包含api字段,说明指令应该取消静态资源重定向
	if strings.Index(orpath,"user") >= 0{
		return
	}
	// 静态资源重定向
	//http.ServeFile(ctx.ResponseWriter,ctx.Request,"static/html"+ctx.Request.URL.Path)
	http.ServeFile(ctx.ResponseWriter,ctx.Request,"static/img/img")
}

func init() {
	// 设置数据库基本信息,相当于连接数据库
	_ = orm.RegisterDataBase("default", "mysql", beego.AppConfig.String("dataSource"), 30)
	// 生成表
	_ = orm.RunSyncdb("default", false, true)
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2021-09-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • controller包
    •   user.go
      •   session.go
      • models包
        •   userModel.go
        • router包
          •   router.go
          • main.go
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档