faithfm / laravel-simple-auth0
为 Laravel 提供简单易用的 Auth0 身份验证(包含 Eloquent 模型)
Requires
- php: ^7.0|^8.0
- auth0/auth0-php: >7.0
- illuminate/support: >8.0
- laravel/framework: >8.0
This package is auto-updated.
Last update: 2024-09-10 02:46:44 UTC
README
以简单/轻量级的方式将 Auth0 集成到您的 Laravel 应用程序中
- 最小化配置。
- 基于 Laravel 的默认认证守卫('session' / SessionGuard) - 即:不需要特殊的认证驱动程序。
- 提供真正的用户模型。(许多 Laravel 库(包括 Nova)在用户提供者提供其他内容时都会出错。)
- 唯一的依赖是 Auth0 的 PHP SDK。
这个库是在花费了大量时间重新整合我们的 Laravel 应用程序与 Auth0 官方 Laravel SDK(auth0/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
字段上,并删除了 password
和 email_verified
字段。如果您的 users
字段包含您希望保留的现有用户/密码条目,您应该修改默认迁移以保留现有字段。
修改 Models/User.php
以反映这些更改
protected $fillable = [ 'name', 'email', 'password', + 'sub', ]; protected $hidden = [ - 'password', 'remember_token', ]; protected $casts = [ - 'email_verified_at' => 'datetime', - 'password' => 'hashed', ];
配置
- 在您的 Auth0 控制台 中创建一个 "常规 Web 应用程序",并根据需要配置允许的回调 + 注销 URL。(有关详细信息,请参阅 Laravel Auth0 SDK 文档的 创建应用程序 部分)
- 使用这些详细信息配置您的
.env
文件,并用您自己的凭据替换它们
AUTH0_DOMAIN=XXXX.xx.auth0.com AUTH0_CLIENT_ID=XXXXXXXXXXX AUTH0_CLIENT_SECRET=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- 将以下行添加到您的
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
属性还用于模型创建。
- Auth0 的
- 初始化 Laravel 的默认身份验证守卫('session' / SessionGuard)以 "登录" 检索到的用户模型。
- Laravel 的 SessionGuard 将模型的有效加载
id
存储在会话中,并使用它来检索所有未来的请求中的用户模型。