faithfm/laravel-simple-auth0

为 Laravel 提供简单易用的 Auth0 身份验证(包含 Eloquent 模型)

1.0.2 2024-05-10 02:06 UTC

This package is auto-updated.

Last update: 2024-09-10 02:46:44 UTC


README

laravel-simple-auth0-logo

以简单/轻量级的方式将 Auth0 集成到您的 Laravel 应用程序中

  • 最小化配置。
  • 基于 Laravel 的默认认证守卫('session' / SessionGuard) - 即:不需要特殊的认证驱动程序。
  • 提供真正的用户模型。(许多 Laravel 库(包括 Nova)在用户提供者提供其他内容时都会出错。)
  • 唯一的依赖是 Auth0 的 PHP SDK

这个库是在花费了大量时间重新整合我们的 Laravel 应用程序与 Auth0 官方 Laravel SDKauth0/login 包)的每个主要更新之后开发的。我们的应用程序是状态性的 "PHP Web 应用程序"(而不是无状态的 "PHP 后端 API",与使用 JWTs 的 SPA 交互),我们不需要 Laravel SDK 中包含的许多高级功能,因此我们决定开发一个基于 Auth0 QuickStart 的简单 PHP Web 应用程序的简单包。

如果您想以简单的方式将 Auth0 与 Laravel 集成,但希望不使用此库,您只需简单地克隆我们的三个控制器,手动注册这些路由,并根据您的需要进行自定义。您很快就会发现

安装

假设您有一个标准的 Laravel 应用程序(在 config/auth.php 中使用默认的 'session' 驱动程序),您可以使用 composer 添加此包,并运行数据库迁移以准备 users 表以用于 Auth0(与基于密码的登录相比)。

composer require faithfm/laravel-simple-auth0
composer require doctrine/dbal                   ## ONLY required if you are using the SQLite DB driver
php artisan vendor:publish --tag=laravel-simple-auth0-migrations
php artisan migrate

注意

修改 users 表时,发布的迁移添加了 sub 字段,删除了 unique 约束在 email 字段上,并删除了 passwordemail_verified 字段。如果您的 users 字段包含您希望保留的现有用户/密码条目,您应该修改默认迁移以保留现有字段。

修改 Models/User.php 以反映这些更改

    protected $fillable = [
        'name',
        'email',
        'password',
+       'sub',
    ];

    protected $hidden = [
-       'password',
        'remember_token',
    ];

    protected $casts = [
-       'email_verified_at' => 'datetime',
-       'password' => 'hashed',
    ];

配置

  1. 在您的 Auth0 控制台 中创建一个 "常规 Web 应用程序",并根据需要配置允许的回调 + 注销 URL。(有关详细信息,请参阅 Laravel Auth0 SDK 文档的 创建应用程序 部分)
  2. 使用这些详细信息配置您的 .env 文件,并用您自己的凭据替换它们
AUTH0_DOMAIN=XXXX.xx.auth0.com
AUTH0_CLIENT_ID=XXXXXXXXXXX
AUTH0_CLIENT_SECRET=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
  1. 将以下行添加到您的 web.php 文件中
use FaithFM\SimpleAuth0\SimpleAuth0ServiceProvider;

// Register login/logout/callback routes (for Auth0)
SimpleAuth0ServiceProvider::registerLoginLogoutCallbackRoutes();

基本用法

您现在可以使用 Laravel 的任何正常认证方法来检查是否已登录、保护路由、获取用户等。

$loggedIn = Auth::check();            // check if logged in
Route::get(...)->middleware('auth')   // protect a route using 'auth' middleware
$user = auth()->user();               // get logged-in current User model (using helper function)
$user = Auth::user();                 // ditto (using Facades)
// etc...

别忘了,认证(AuthN)是关于知道 在使用系统。用户是否有权使用系统是另一个主题,称为授权(AuthZ) - 请参阅 Laravel 授权 文档。

对于一种简单基于表格/模型的方法来处理用户权限/授权,您可能会喜欢尝试我们的 Laravel Simple Permissions 包。

注意

这些包都是我们为应用程序部署的总体 AuthN/AuthZ 模式的一部分。(我们Faith FM Laravel Auth0 模式 包比底层包有更多意见,并包含一些可能对更广泛的受众不太有帮助的已发布模板文件,但如果它们有帮助,欢迎您使用。)

工作原理

注册了三个 路由:/login,/logout,/callback

  • /login 路由重定向到 Auth0 登录页面,成功后重定向回 /callback 路由。

重要

此路由试图捕获 'previous' URL 作为回调成功登录后重定向到的 'intended' URL

  • /callback 路由
    • 验证回调请求参数并检索一个 Auth0 用户(使用 Auth0 PHP SDK
    • 加载(或创建)匹配的 用户模型
      • Auth0 的 sub 属性用于模型检索。
      • Auth0 的 email + name 属性还用于模型创建。
    • 初始化 Laravel 的默认身份验证守卫('session' / SessionGuard)以 "登录" 检索到的用户模型。
    • Laravel 的 SessionGuard 将模型的有效加载 id 存储在会话中,并使用它来检索所有未来的请求中的用户模型。