pioneer-dynamics/laravel-passkey

Laravel Passkey集成,简单易用

v1.0.10 2024-06-13 04:48 UTC

README

Laravel Passkey集成,简单易用

点击下面的缩略图查看包的演示视频。

感谢

项目的核心使用了svgta/webauthn库。

警告

!!!警告!!! 命令passkey:install只能在开发环境中运行一次。根据提供的选项,此命令将发布以下文件并修改它们以满足您的需求。以下为详细信息。

  1. 配置文件,如果提供了--config参数
  2. 迁移文件
  3. Jetstream风格的Inertia JS组件文件,如果提供了--jetstream-inertia

!!警告!! 任何现有文件将被替换。

安装

您有两种方式运行设置 - 1、步骤#2(以下)中的设置命令或 2、vendor:publish命令。我推荐使用passkey:install命令,因为它除了发布文件外,还会替换一些发布文件中的占位符。使用--table--username标志来更改默认值。这些值默认为usersemail。如果您使用vendor:publish命令,则需要手动替换__USERNAME____TABLE____USERNAME_LABEL____USERNAME_TYPE__占位符。这些占位符可以在js/Components/ConfirmsPasswordOrPasskey.vuejs/Components/ConfirmsPasskey.vuejs/Pages/Auth/LoginWithPasskey.vueconfig/passkey.php文件中找到。

  1. 引入库

    composer install pioneer-dynamics/laravel-passkey

  2. 运行设置

    在运行此命令之前,运行php artisan passkey:install --help以了解所有选项。

    php artisan passkey:install

    这将发布配置文件、迁移文件和一些Jetstream-Inertia风格的vue文件。它还会替换这些发布文件中的某些内容。

  3. 运行迁移

    php artisan migrate

  4. PasskeyUser接口实现到您的用户模型中,并添加HasPasskeys特质

    <?php
    
    namespace App\Models;
    
    use PioneerDynamics\LaravelPasskey\Traits\HassPasskeys;
    use PioneerDynamics\LaravelPasskey\Contracts\PasskeyUser;
    // ...
    use Illuminate\Foundation\Auth\User as Authenticatable;
    // ...
    
    class User extends Authenticatable implements PasskeyUser
    {
        // ...
        use HasPasskeys;
    
        // ...
    
        /**
         * In addition to some helper methods, the below methods are defined
         * in the `HasPasskeys` trait. Override them here if needed. 
         * 
         * Below are the default definitions in `HasPasskeys`
         */
    
        // public function getUsername()
        // {
        //      // The username of the user (Shown by the browser passkey interface)
        //      return $this->email;
        // }
        // 
        // public function getUserId()
        // {
        //      // The ID of the user
        //      return $this->id;
        // }
        // 
        // public function getDisplayName()
        // {
        //      // The display name of the user
        //      return $this->name;
        // }
        // 
        // public function getUserIcon()
        // {
        //      // The display picture of the user.
        //      // This MUST be a data URI.
        //      // E.g.
        //      // return 'data:image/svg+xml;utf8,...'
        //     return null;
        // }
    
        // ...
    }
  5. 如果您使用Laravel Jetstream与InertiaJS,可以在FortifyServiceProviderboot()命令中添加以下内容,以覆盖默认登录Vue并使用本包提供的Vue。

    <?php
    
    namespace App\Providers;
    
    // ...
    
    use Inertia\Inertia;
    use Illuminate\Support\Facades\Route;
    use Illuminate\Support\ServiceProvider;
    use Laravel\Fortify\Fortify;
    
    // ...
    
    class FortifyServiceProvider extends ServiceProvider
    {
        // ...
    
        /**
        * Bootstrap any application services.
        */
        public function boot(): void
        {
            // ...
    
            Fortify::loginView(function () {
                return Inertia::render('Auth/LoginWithPasskey', [
                    'canResetPassword' => Route::has('password.request'),
                    'status' => session('status'),
                ]);
            });
    
            // ...
        }
    }
  6. <ConfirmsPassword/>组件替换为<ConfirmsPasswordOrPasskey/>组件,在所有使用<ConfirmsPassword/>的地方。

  7. 如果您使用Jetstream-InertiaJS,以下包将被自动安装,如果命令带有--jetstream-inertia选项。

    1. npm i luxon
    2. npm i @simplewebauthn/browser

问题

在此处自由提出任何问题

贡献

自由提出拉取请求。

许可证

MIT许可证(MIT)版权所有 © Mathew Paret

特此授予任何获得本软件及其相关文档文件(以下简称“软件”)副本的任何人免费使用本软件的权利,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或出售软件副本的权利,并允许向提供软件的人授予上述权利,但须遵守以下条件

上述版权声明和本许可声明应包含在软件的所有副本或主要部分中。

本软件按“现状”提供,不提供任何形式的保证,无论是明示的或暗示的,包括但不限于适销性、特定用途适用性和非侵权性保证。在任何情况下,作者或版权持有人不对任何索赔、损害或其他责任负责,无论这些责任是基于合同行为、侵权行为或其他方式,这些责任源于、产生于或与该软件或软件的使用或其他相关活动有关。