beego框架(golang)学习验证码
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)学习验证码的更多相关文章
- beego框架(golang)学习过滤器(实现restful请求)
过滤器 在用beego做restful路由的时候,遇到了除了GTE.POST之外的HTTP请求,比如 PUT.PATCH.delete请求无法通过路由认证,报错误:405 METHOD NOT ALL ...
- golang学习之beego框架配合easyui实现增删改查及图片上传
golang学习之beego框架配合easyui实现增删改查及图片上传 demo目录: upload文件夹主要放置上传的头像文件,main是主文件,所有效果如下: 主页面: 具体代码: <!DO ...
- golang学习笔记16 beego orm 数据库操作
golang学习笔记16 beego orm 数据库操作 beego ORM 是一个强大的 Go 语言 ORM 框架.她的灵感主要来自 Django ORM 和 SQLAlchemy. 目前该框架仍处 ...
- golang学习笔记9 beego nginx 部署 nginx 反向代理 golang web
golang学习笔记9 beego nginx 部署 nginx 反向代理 golang web Nginx 部署 - beego: 简约 & 强大并存的 Go 应用框架https://bee ...
- golang学习笔记8 beego参数配置 打包linux命令
golang学习笔记8 beego参数配置 打包linux命令 参数配置 - beego: 简约 & 强大并存的 Go 应用框架https://beego.me/docs/mvc/contro ...
- golang学习笔记7 使用beego swagger 实现API自动化文档
golang学习笔记7 使用beego swagger 实现API自动化文档 API 自动化文档 - beego: 简约 & 强大并存的 Go 应用框架https://beego.me/doc ...
- go语言,golang学习笔记4 用beego跑一个web应用
go语言,golang学习笔记4 用beego跑一个web应用 首页 - beego: 简约 & 强大并存的 Go 应用框架https://beego.me/ 更新的命令是加个 -u 参数,g ...
- go语言,golang学习笔记3 用命令下载框架报错问题解决 设置环境变量
go语言,golang学习笔记3 用命令下载框架报错问题解决 设置环境变量 下载安装:go get github.com/astaxie/beego 首页 - beego: 简约 & 强大并存 ...
- go语言,golang学习笔记2 web框架选择
go语言,golang学习笔记2 web框架选择 用什么go web框架比较好呢?能不能推荐个中文资料多的web框架呢? beego框架用的人最多,中文资料最多 首页 - beego: 简约 & ...
随机推荐
- 叉积_判断点与三角形的位置关系 P1355 神秘大三角
题目描述 判断一个点与已知三角形的位置关系. 输入输出格式 输入格式: 前三行:每行一个坐标,表示该三角形的三个顶点 第四行:一个点的坐标,试判断该点与前三个点围成三角形的位置关系 (详见样例) 所有 ...
- vue-d2admin前端axio异步请求详情
vue-d2admin前端axio异步请求详情 d2admin>src>api>sys.login.js 设计axio api import request from '@/plug ...
- CodeForeces 842d Vitya and Strange Lesson ——(带lazy标记的01字典树)
给一个序列,每次操作对这个序列中的所有数异或一个x,问每次操作完以后整个序列的mex值. 做法是去重后构建01字典树,异或x就是对root加一个x的lazy标志,每次pushDown时如果lazy的这 ...
- Struts动态结果集,了解一些就好
Struts动态结果集dynamic_result 在struts配置文件中${成员变量}(不是EL表达式,是ognl表达式)符号可以从value stack(即值栈)中取值,可以在action ...
- ansys meshing当中共享节点的操作
原视频下载地址: https://yunpan.cn/cYKuN9mIHMUxa 访问密码 5858
- Vue.js中 watch的理解以及深度监听
如代码: <div> <p>FullName: {{fullName}}</p> <p>FirstName: <input type=" ...
- 为什么要监控sql语句,以及如何监控,都有哪几种方式可以监控。
快速阅读 为什么要监控sql语句,以及如何监控,都有哪几种方式可以监控. 我们知道sql server 中有个工具叫sql profile ,可以实时监控sql server中 执行的sql 语句,以 ...
- 12.linux上Apache虚拟主机的建立和https协议网站建立
一.Apache虚拟主机的建立 虚拟web主机 在同一台服务器上建立多个web站点,每个站点不独占用一台真正的服务器 1.建立dns解析 两个域名同一个ip ...
- oracle清理归档日志(缓存)
1.用RMAN连接目标DB: rman target / RMAN target sys/*****@orcl 2.在RMAN命令窗口中,输入如下命令(清理所有的归档日志): crosscheck a ...
- 狼人杀面杀APP(FGUI教程)
本教程为FairyGUI进阶教程,这是一套完整的面杀桌游APP.游戏不仅有发放随机身份的功能,还涉及10个页面的切换与各页面不同状态(最多达9种状态)的切换,众多复杂UI的交互,多语言切换,3D粒子在 ...