1. Go to this page and download the library: Download laravel/passkeys library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
laravel / passkeys example snippets
use Laravel\Passkeys\Contracts\PasskeyUser;
use Laravel\Passkeys\PasskeyAuthenticatable;
class User extends Authenticatable implements PasskeyUser
{
use PasskeyAuthenticatable;
}
use App\Models\User;
use App\Models\Passkey;
use Laravel\Passkeys\Passkeys;
public function boot(): void
{
Passkeys::useUserModel(User::class);
Passkeys::usePasskeyModel(Passkey::class);
}
// config/passkeys.php
return [
// Relying Party ID (defaults to APP_URL host)
'relying_party_id' => parse_url(config('app.url'), PHP_URL_HOST),
// Origins allowed to complete WebAuthn ceremonies
'allowed_origins' => [config('app.url')],
// Secret for deriving stable opaque user handles
'user_handle_secret' => env('PASSKEYS_USER_HANDLE_SECRET', config('app.key')),
// WebAuthn timeout in milliseconds
'timeout' => 60000,
// Authentication guard
'guard' => 'web',
// Routes middleware
'middleware' => ['web'],
// Middleware applied to passkey management routes (set to [] to disable)
'management_middleware' => ['password.confirm'],
// Throttle middleware (null to disable)
'throttle' => 'throttle:6,1',
// Redirect after login
'redirect' => '/',
];
use Illuminate\Http\Request;
use Illuminate\Validation\ValidationException;
use Laravel\Passkeys\Contracts\PasskeyUser;
use Laravel\Passkeys\Passkey;
use Laravel\Passkeys\Passkeys;
Passkeys::authorizeLoginUsing(function (Request $request, PasskeyUser $user, Passkey $passkey): bool {
if ($user->is_banned) {
throw ValidationException::withMessages([
'credential' => ['This account has been banned.'],
]);
}
return true;
});
use Laravel\Passkeys\Actions\GenerateVerificationOptions;
use Laravel\Passkeys\Actions\VerifyPasskey;
$options = app(GenerateVerificationOptions::class)($request->user());
$passkey = app(VerifyPasskey::class)(
$request->credential(),
$options,
$request->user(),
);
use Laravel\Passkeys\Actions\GenerateRegistrationOptions;
use Webauthn\AuthenticatorSelectionCriteria;
class CustomRegistrationOptions extends GenerateRegistrationOptions
{
public function authenticatorSelection(): AuthenticatorSelectionCriteria
{
// Only allow platform authenticators (Touch ID, Face ID, Windows Hello)
return AuthenticatorSelectionCriteria::create(
authenticatorAttachment: AuthenticatorSelectionCriteria::AUTHENTICATOR_ATTACHMENT_PLATFORM,
userVerification: AuthenticatorSelectionCriteria::USER_VERIFICATION_REQUIREMENT_REQUIRED,
residentKey: AuthenticatorSelectionCriteria::RESIDENT_KEY_REQUIREMENT_REQUIRED,
);
}
}
// In your service provider
$this->app->bind(GenerateRegistrationOptions::class, CustomRegistrationOptions::class);
use Laravel\Passkeys\Contracts\PasskeyLoginResponse;
class MyLoginResponse implements PasskeyLoginResponse
{
public function toResponse($request)
{
return response()->json(['redirect' => '/dashboard']);
}
}
// In your service provider
$this->app->singleton(PasskeyLoginResponse::class, MyLoginResponse::class);
use Laravel\Passkeys\Passkey as BasePasskey;
class Passkey extends BasePasskey
{
protected static function booted(): void
{
static::created(function ($passkey) {
// Custom logic when passkey is created
});
}
}
use Laravel\Passkeys\Passkeys;
Passkeys::ignoreRoutes();