将 hCaptcha 添加到 Laravel Jetstream (Inertia.js)

Adding hCaptcha to Laravel Jetstream (Inertia.js)

我正在使用 Laravel 8 - Jetstream 2.0 和 Inertia 堆栈。

我安装了 Vue hCaptcha 组件 https://github.com/hCaptcha/vue-hcaptcha Vue 组件已经在我的登录表单中并且看起来不错。

Vue component is working

然后我按照本指南 https://serversideup.net/laravel-hcaptcha-custom-validation-rule/ 并在 laravel 中设置了 hCaptcha 规则。

现在我的问题是 laravel/jetstream 我可以在提交表单时设置验证码规则。所以验证码被使用而不仅仅是显示。

我知道这是一个非常基本的问题,但我是 laravel 的新手,正在尝试进入 vue、inertia.js 和 jetstream。

好的,fortitfy 中没有默认的 Logincontroller,所以我自己制作了一个来验证表单中的验证码。此代码缺少用户友好的错误消息管理,但验证码有效。

登录控制器

<?php

namespace App\Http\Controllers\Auth;

use App\Http\Controllers\Controller;
use App\Models\User;
use App\Rules\ValidHCaptcha;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Validator;


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

        }
    }
}

登录控制器的路由

//Custom login controller for Captcha use Route::post('login', 
[LoginController::class, 'authenticate'])->name('login');