iT邦幫忙

0

Laravel 9 使用 mews/captcha 在驗證 captcha 時沒有作用

  • 分享至 

  • xImage

使用mews/captcha套件做驗證碼功能,前台驗證碼圖片有正常運作,但驗證卻沒有作用。

表單post處理如下,但驗證碼亂打都沒有error丟出,但是required的部分都有error,想問有人遇過這個問題嗎?

安裝步驟與套件給的文件一樣 https://github.com/mewebstudio/captcha

  $request->validate([
            "name" => "required",
            "company" => "required",
            "tel" => " required ",
            "email" => "required|email ",
            "content" => "required",
            'captcha' => 'required|captcha',
        ], [
            "name.required" => "請輸入姓名",
            "company.required" => "請輸入公司名稱",
            "tel.required" => "請輸入聯絡電話",
            "email.required" => "請輸入Email",
            "email.email" => "Email格式錯誤",
            "content.required" => "請輸入諮詢內容",
            "captcha.required" => "請輸入驗證碼",
            'captcha.captcha' => "驗證碼錯誤",
        ]);
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

0

我記得如果想要先在前端驗証。要自已寫處理。
但一般並不建議寫在前端驗証判斷。
因為那等於開了一條通道給機器人驗証測試。

所以預定都是送來後端後再回傳錯誤回去。

感謝大大回復

我是在後端做驗證的。
但是實作 mews/captcha 驗證碼功能,只有看網路上簡單教學,功能實現不了,昨天腦袋卡住了。

今天深入去研究套件源碼,才解決問題。


    /**
     * Captcha check
     *
     * @param string $value
     * @return bool
     */
    public function check(string $value): bool
    {
        if (!$this->session->has('captcha')) {
            return false;
        }

        $key = $this->session->get('captcha.key');
        $sensitive = $this->session->get('captcha.sensitive');
        $encrypt = $this->session->get('captcha.encrypt');

        if (!Cache::pull($this->get_cache_key($key))) {
            $this->session->remove('captcha');
            return false;
        }

        if (!$sensitive) {
            $value = $this->str->lower($value);
        }

        if($encrypt) $key = Crypt::decrypt($key);
        $check = $this->hasher->check($value, $key);
        // if verify pass,remove session
        if ($check) {
            $this->session->remove('captcha');
        }

        return $check;
    }

我要發表回答

立即登入回答