表单令牌
验证规则支持对表单的令牌进行验证,首先需要在表单中增加一个隐藏域:
// 0.1.2 起,为了简化令牌表单的定义,token() 方法返回的值变更为数组,$token['name'] 为表单名,$token['value'] 为表单值。
<?php $token = $request->token(); ?>
<input type="hidden" name="<?php echo $token['name']; ?>" value="<?php echo $token['value']; ?>">
// 0.1.2 之前的版本
<input type="hidden" name="__token__" value="<?php echo $request->token(); ?>">
然后在验证规则中,添加 token 验证规则即可,例如:
namespace app\index\validate;
use ginkgo\Validate;
class User extends Validate {
protected $rule = array(
'email' => array(
'format' => 'email',
),
'__token__' => array(
'require' => true,
'token' => true,
),
);
}
如果令牌名称不是 __token__
,而是 __hash__
,则表单需要改为:
<?php $token = $request->token('__hash__'); ?>
<input type="hidden" name="<?php echo $token['name']; ?>" value="<?php echo $token['value']; ?>">
验证器中改为:
namespace app\index\validate;
use ginkgo\Validate;
class User extends Validate {
protected $rule = array(
'email' => array(
'format' => 'email',
),
'__hash__' => array(
'require' => true,
'token' => true,
),
);
}
如果需要自定义令牌生成规则,可以调用 Request
类的 token
方法,例如:
namespace app\index\ctrl;
use ginkgo\Ctrl;
class Index extends Ctrl {
public function index() {
$token = $this->obj_request->token('__token__', 'sha1');
$this->assign('token', $token);
return $this->fetch();
}
}
然后在模板表单中使用:
<input type="hidden" name="<?php echo $token['name']; ?>" value="<?php echo $token['value']; ?>">