我知道这个主题是存在的,但没有人能解决我的问题。我正在使用mewebstudio/captcha库,一切都很好,但当我提交时,它总是告诉我验证码是错误的。我的验证规则:
mewebstudio/captcha
'captcha' => 'required|captcha'
在我的HTML表单中:
<?= captcha_img(); ?> <input type="text" name="captcha">
我用的是php5.6,Laravel 5.1和mews/captcha 2.2
llmtgqce1#
我的解决方案:
'captcha' => ['required' , new CheckCaptcha]
规则类:
public function passes($attribute, $value) { return Hash::check($value, session('captcha.key')); } /** * Get the validation error message. * * @return string */ public function message() { return 'Invalid captcha'; }
zysjyyx42#
我找到了一个解决方案,希望将来能帮助到别人。好吧,这是库本身的一个错误,他们在没有检查结果的情况下删除会话密钥:
public function check($value) { if ( ! $this->session->has('captcha')) { return false; } $key = $this->session->get('captcha.key'); $sensitive = $this->session->get('captcha.sensitive'); if ( ! $sensitive) { $value = $this->str->lower($value); } $this->session->remove('captcha'); return $this->hasher->check($value, $key); }
所以我的解决方案是这样的(你需要扩展类,覆盖方法并将类绑定到新的实现):
public function check($value) { if ( ! $this->session->has('captcha')) { return false; } $key = $this->session->get('captcha.key'); $sensitive = $this->session->get('captcha.sensitive'); if ( ! $sensitive) { $value = $this->str->lower($value); } $isNotARobot = $this->hasher->check($value, $key);dd($isNotARobot); if ($isNotARobot) { $this->session->remove('captcha'); } return $isNotARobot; }
h4cxqtbf3#
在包供应商的CaptchaServiceProvider.php中,注解路由:
if ((double)$this->app->version() >= 5.2) { $router->get('captcha/api/{config?}', '\Mews\Captcha\CaptchaController@getCaptchaApi')->middleware('web'); $router->get('captcha/{config?}', '\Mews\Captcha\CaptchaController@getCaptcha')->middleware('web'); } else { $router->get('captcha/api/{config?}', '\Mews\Captcha\CaptchaController@getCaptchaApi'); $router->get('captcha/{config?}', '\Mews\Captcha\CaptchaController@getCaptcha'); }
然后在你的路由文件中添加上面的路由,而不使用中间件('web '):
Route::get('captcha/api/{config?}', '\Mews\Captcha\CaptchaController@getCaptchaApi'); Route::get('captcha/{config?}', '\Mews\Captcha\CaptchaController@getCaptcha');
3条答案
按热度按时间llmtgqce1#
我的解决方案:
规则类:
zysjyyx42#
我找到了一个解决方案,希望将来能帮助到别人。
好吧,这是库本身的一个错误,他们在没有检查结果的情况下删除会话密钥:
所以我的解决方案是这样的(你需要扩展类,覆盖方法并将类绑定到新的实现):
h4cxqtbf3#
在包供应商的CaptchaServiceProvider.php中,注解路由:
然后在你的路由文件中添加上面的路由,而不使用中间件('web '):