php mewebstudio/captcha验证中的验证码错误

gab6jxml  于 2023-05-05  发布在  PHP
关注(0)|答案(3)|浏览(235)

我知道这个主题是存在的,但没有人能解决我的问题。
我正在使用mewebstudio/captcha库,一切都很好,但当我提交时,它总是告诉我验证码是错误的。
我的验证规则:

'captcha' => 'required|captcha'

在我的HTML表单中:

<?= captcha_img(); ?>
<input type="text" name="captcha">

我用的是php5.6,Laravel 5.1和mews/captcha 2.2

llmtgqce

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';
}
zysjyyx4

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;
}
h4cxqtbf

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');

相关问题