beego框架(golang)学习验证码

登录页面使用验证码

路由设置

/beego_admin_template/routers/router.go

get请求页面, post验证用户名密码和验证码

	beego.Router("/login", &admin.CommonController{},
"get:LoginPage;post:Login")

当url输入 http://localhost:8080/login 时跳转到登录页面,显示验证码

控制器目录

/beego_admin_template/controllers/admin/common.go

package admin
import (
"github.com/astaxie/beego"
"github.com/astaxie/beego/cache"
captcha2 "github.com/astaxie/beego/utils/captcha"
) // 全局验证码结构体
var captcha *captcha2.Captcha // init函数初始化captcha
func init() {
// 验证码功能
// 使用Beego缓存存储验证码数据
store := cache.NewMemoryCache()
// 创建验证码
captcha = captcha2.NewWithFilter("/captcha", store)
// 设置验证码长度
captcha.ChallengeNums = 4
// 设置验证码模板高度
captcha.StdHeight = 50
// 设置验证码模板宽度
captcha.StdWidth = 120
} // 登录页面
func (c *CommonController)LoginPage() {
// 设置模板目录
c.TplName = "admin/common/login.html"
}

登录页面

/beego_admin_template/views/admin/common/login.html

<div style="margin-left: 10px;">
{{create_captcha}}
</div>

验证验证码

// 登录
func (c *CommonController)Login() {
// 验证码验证
if !captcha.VerifyReq(c.Ctx.Request) {
c.Data["Error"] = "验证码错误"
return
} // 其他代码
…… c.Redirect("/", 302)
} captcha.go
// VerifyReq verify from a request
func (c *Captcha) VerifyReq(req *http.Request) bool {
// 解析请求体
req.ParseForm()
// 读取请求参数调用Verify方法
return c.Verify(req.Form.Get(c.FieldIDName), req.Form.Get(c.FieldCaptchaName))
} // 验证验证码id和字符串
func (c *Captcha) Verify(id string, challenge string) (success bool) {
if len(challenge) == 0 || len(id) == 0 {
return
} var chars []byte key := c.key(id) if v, ok := c.store.Get(key).([]byte); ok {
chars = v
} else {
return
} defer func() {
// finally remove it
c.store.Delete(key)
}() if len(chars) != len(challenge) {
return
}
// verify challenge
for i, c := range chars {
if c != challenge[i]-48 {
return
}
} return true
}

注意点

在调试验证码的时候,会发现验证码老是错误,是因为默认验证码是存储在内存中,每次重启会删除内存

源码查看

文件:common.go

调用缓存包中的NewMemoryCache()函数,返回一个新的内存缓存指针地址

store := cache.NewMemoryCache()

文件:memory.go

MemoryCache是一个内存缓存适配器,它包含一个map带有读写锁的map存储

// MemoryCache is Memory cache adapter.
// it contains a RW locker for safe map storage.
type MemoryCache struct {
sync.RWMutex
dur time.Duration
items map[string]*MemoryItem
Every int // run an expiration check Every clock time
} // NewMemoryCache returns a new MemoryCache.
func NewMemoryCache() Cache {
cache := MemoryCache{items: make(map[string]*MemoryItem)}
return &cache
}

文件:common.go

NewWithFilter()方法创建一个新的验证码,并返回该验证码的指针

captcha = captcha2.NewWithFilter("/captcha", store)

文件 captcha.go

// 该方法创建了一个验证码在指定缓存中
// 增加了一个服务于验证码图片的过滤器
// 并且添加了一个用于输出html的模板函数 func NewWithFilter(urlPrefix string, store cache.Cache) *Captcha {
// 生成验证码结构体
cpt := NewCaptcha(urlPrefix, store) // 创建过滤器
beego.InsertFilter(cpt.URLPrefix+"*", beego.BeforeRouter, cpt.Handler) // add to template func map
beego.AddFuncMap("create_captcha", cpt.CreateCaptchaHTML) return cpt
}

其实 cpt.Handler需要好好看一下,里面包含了beego过滤器的使用

beego框架(golang)学习验证码的更多相关文章

  1. beego框架(golang)学习过滤器(实现restful请求)

    过滤器 在用beego做restful路由的时候,遇到了除了GTE.POST之外的HTTP请求,比如 PUT.PATCH.delete请求无法通过路由认证,报错误:405 METHOD NOT ALL ...

  2. golang学习之beego框架配合easyui实现增删改查及图片上传

    golang学习之beego框架配合easyui实现增删改查及图片上传 demo目录: upload文件夹主要放置上传的头像文件,main是主文件,所有效果如下: 主页面: 具体代码: <!DO ...

  3. golang学习笔记16 beego orm 数据库操作

    golang学习笔记16 beego orm 数据库操作 beego ORM 是一个强大的 Go 语言 ORM 框架.她的灵感主要来自 Django ORM 和 SQLAlchemy. 目前该框架仍处 ...

  4. golang学习笔记9 beego nginx 部署 nginx 反向代理 golang web

    golang学习笔记9 beego nginx 部署 nginx 反向代理 golang web Nginx 部署 - beego: 简约 & 强大并存的 Go 应用框架https://bee ...

  5. golang学习笔记8 beego参数配置 打包linux命令

    golang学习笔记8 beego参数配置 打包linux命令 参数配置 - beego: 简约 & 强大并存的 Go 应用框架https://beego.me/docs/mvc/contro ...

  6. golang学习笔记7 使用beego swagger 实现API自动化文档

    golang学习笔记7 使用beego swagger 实现API自动化文档 API 自动化文档 - beego: 简约 & 强大并存的 Go 应用框架https://beego.me/doc ...

  7. go语言,golang学习笔记4 用beego跑一个web应用

    go语言,golang学习笔记4 用beego跑一个web应用 首页 - beego: 简约 & 强大并存的 Go 应用框架https://beego.me/ 更新的命令是加个 -u 参数,g ...

  8. go语言,golang学习笔记3 用命令下载框架报错问题解决 设置环境变量

    go语言,golang学习笔记3 用命令下载框架报错问题解决 设置环境变量 下载安装:go get github.com/astaxie/beego 首页 - beego: 简约 & 强大并存 ...

  9. go语言,golang学习笔记2 web框架选择

    go语言,golang学习笔记2 web框架选择 用什么go web框架比较好呢?能不能推荐个中文资料多的web框架呢? beego框架用的人最多,中文资料最多 首页 - beego: 简约 & ...

随机推荐

  1. CLion201914 下载安装

    链接:https://pan.baidu.com/s/12Gzo8gL3iUFoL5wok6L_BQ  密码:7vw4 56ZS5PQ1RF-eyJsaWNlbnNlSWQiOiI1NlpTNVBRM ...

  2. Liskov替换原则(LSP)

    OCP背后的主要机制是抽象和多态.在静态类型语言中,比如C++和Java,支持抽象和多态的关键机制之一是继承.正是使用了继承,才可以创建实现其基类中抽象方法的派生类.是什么设计规则在支配着这种特殊的继 ...

  3. Spring|IOC启动流程

    1.IOC启动流程 IOC的启动流程分为两个阶段,第一阶段是容器的启动阶段,第二阶段是Bean实例化阶段. 容器的启动阶段:加载配置信息,分析配置信息,其他 Bean实例化阶段:实例化对象,装配依赖, ...

  4. 利用ssh 删除远程服务器文件

    ssh 登录,利用命令 rm 登录ssh ssh name@10.202.9.11 rm 命令删除文件 rm file rm -rf 删除文件夹 rm -rf fold 删除当前文件夹内容,保留当前文 ...

  5. 范仁义web前端介绍课程---5、webstorm的下载安装

    范仁义web前端介绍课程---5.webstorm的下载安装 一.总结 一句话总结: webstorm破解版搜索:webstorm破解 site:52pojie.cn 编辑器随便选用,功能都差不多,哪 ...

  6. if ( ! defined('BASEPATH')) exit('No direct script access allowed')的作用

    在看源代码时,发现codeigniter框架的控制器中,总是加上这样一段话: if(!defined('BASEPATH'))exit('No direct script access allowed ...

  7. 从Windows命令行启动MySQL

    SERVER: 从Windows命令行启动MySQL 可以从命令行手动启动MySQL服务器.可以在任何版本的Windows中实现. 要想从命令行启动mysqld服务器,你应当启动控制台窗口(或“DOS ...

  8. CMU Database Systems - Parallel Execution

    并发执行,主要为了增大吞吐,降低延迟,提高数据库的可用性 先区分一组概念,parallel和distributed的区别 总的来说,parallel是指在物理上很近的节点,比如本机的多个线程或进程,不 ...

  9. Git: git tag 使用小结(给发布版本打标记,切换并修改某个历史版本)

    通常在软件发布的时候会打一个tag,用于标注这次发布的相关信息, 这样做的好处是,将来如果这个版本出现了问题,可以通过tag迅速定位到当前版本,进行错误修复. 1. 新建tag $ git tag v ...

  10. Kotlin 之操作符重载

    Kotlin 之操作符重载   参考: kotlin in action kotlin 官方参考文档 运算符重载 Kotlin允许我们为自己的类型提供预定义的一组操作符实现(这些操作符都对应的成员函数 ...