我使用的是带有惯性堆栈的Laravel 8 - Jetstream 2.0。
我安装了Vue hCaptcha组件https://github.com/hCaptcha/vue-hcaptcha Vue组件已经在我的登录表单中,看起来很好。
Vue组件正在工作
然后我按照这个指南https://serversideup.net/laravel-hcaptcha-custom-validation-rule/在laravel中设置了hCaptcha规则。
现在我的问题是,在laravel/jetstream中,我可以在提交表单时设置captcha规则。所以captcha是使用的,而不仅仅是显示。
我知道这是一个非常基本的问题,但我对laravel非常陌生,并试图了解vue, inertial .js和jetstream。
Ok,所以在fortify中没有默认的Logincontroller,所以我自己做了一个来验证表单中的captcha。此代码缺乏用户友好的错误消息管理,但验证码正在工作。
Logincontroller
<?php
namespace AppHttpControllersAuth;
use AppHttpControllersController;
use AppModelsUser;
use AppRulesValidHCaptcha;
use IlluminateHttpRequest;
use IlluminateSupportFacadesAuth;
use IlluminateSupportFacadesHash;
use IlluminateSupportFacadesValidator;
class LoginController extends Controller
{
public function authenticate(Request $request)
{
// Retrive Input
$validation = $request->only('email', 'password', 'hcaptcharesponse');
Validator::make($validation, [
'email' => ['required', 'string', 'email', 'max:255'],
'password' => ['required'],
'hcaptcharesponse' => ['required', new ValidHCaptcha()],
])->validate();
try {
$user = User::where('email', $request->email)->first();
if ($user && Hash::check($request->password, $user->password)) {
Auth::login($user);
return redirect('/dashboard');
}
} catch (Exception $e) {
dd($e->getMessage());
}
}
}
Logincontroller路由
//Custom login controller for Captcha use Route::post('login',
[LoginController::class, 'authenticate'])->name('login');