使用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' => "驗證碼錯誤",
]);
我記得如果想要先在前端驗証。要自已寫處理。
但一般並不建議寫在前端驗証判斷。
因為那等於開了一條通道給機器人驗証測試。
所以預定都是送來後端後再回傳錯誤回去。
感謝大大回復
我是在後端做驗證的。
但是實作 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;
}