tp5表单令牌手册解释存在很大问题

浏览:3437 发布日期:2017/03/04 分类:ThinkPHP5专区 关键字: 表单令牌
表单令牌这里说的用法,很有问题!!!
如果按照手册说的:举个例子
protected $rule = [
'name' => 'require|max:25|token',
'password' => 'require'
'email' => 'email',
];

如果场景
1.登录:提交参数:name 和passowrd,还有__token__,ok!没问题
2.如果现在通过email改密码的场景:提交email、password、__token__,就有问题了,没有token验证
ok,那我把$rule改一下
protected $rule = [
'name' => 'require|max:25|token',
'password' => 'require'
'email' => 'email|token',
];


场景2是满足了,但如果在一个更新name和email的场景下,就会出现一个致命错误:令牌数据无效!

为什么?看源码后知道:
name后的token已经验证后清空了,但是email又要验证token导致错误

看了源码找到一个方案,可以解决灵活的参数提交
protected $rule = [
'username' => 'require|email',
'password' => 'require',
'__token__' => 'token',
];
/*token不是默认名字时*/
protected $rule = [
'username' => 'require|email',
'password' => 'require',
'__hash__' => 'token:__hash__',
];

现在,只要我们在需要令牌验证时,提交__token__就ok了,所有参数都可灵活组合,只要提交了__token__就会进行验证,
同时,在配置$scene场景时
protected $scene = [
'login' => ['username', 'password', '__token__'],
'edit' => ['username', 'email', '__token__'],
'passwd' => ['password', 'email'],
];

只要在你需要验证的场景中增加__token__项就可以了,
很灵活,很方便
最佳答案
评论( 相关
后面还有条评论,点击查看>>