[ 'string', 'required', function ($attribute, $value, $fail) { $lastCode = (new Totp())->GenerateToken( Base32::decode(Auth::user()->totp_secret), Carbon::now()->subSeconds(30)->timestamp ); $code = (new Totp())->GenerateToken(Base32::decode(Auth::user()->totp_secret)); if (!($value === $code || $value === $lastCode)) { $fail("Code de vérification $attribute invalide."); } } ] ]; } }