Laravel 身份验证综合指南

已发表: 2023-03-23

身份验证是 Web 应用程序最关键和最基本的功能之一。 像 Laravel 这样的 Web 框架为用户提供了多种身份验证方式。

您可以快速安全地实现 Laravel 身份验证功能。 但是,实施这些身份验证功能不当可能会带来风险,因为恶意方可能会利用它们。

本指南将教您开始使用您选择的 Laravel 身份验证方法所需的所有知识。

继续阅读!

Laravel 身份验证简介

Laravel 引入了由“守卫”和“提供者”组成的模块。 Guards 为每个请求定义用户身份验证,providers 定义从持久存储(例如 MySQL 数据库)中检索用户。

我们在名为config/auth.php的文件中定义身份验证参数。 它包括几个选项来调整和修改 Laravel 的身份验证行为。

首先,您必须定义身份验证默认值。 此选项控制应用程序的默认身份验证“保护”和密码重置选项。 您可以根据需要更改这些默认值,但它们是大多数应用程序的完美开始。

接下来,您为您的应用程序定义身份验证保护。 在这里,我们的默认配置使用会话存储和 Eloquent 用户提供程序。 所有身份验证驱动程序都有一个用户提供程序。

 return [ /* Defining Authentication Defaults */ 'defaults' => [ 'guard' => 'web', 'passwords' => 'users', ], /* Defining Authentication Guards Supported: "session" */ 'guards' => [ 'web' => [ 'driver' => 'session', 'provider' => 'users', ], ], /* Defining User Providers Supported: "database", "eloquent" */ 'providers' => [ 'users' => [ 'driver' => 'eloquent', 'model' => App\Models\User::class, ], // 'users' => [ // 'driver' => 'database', // 'table' => 'users', // ], ], /* Defining Password Resetting */ 'passwords' => [ 'users' => [ 'provider' => 'users', 'table' => 'password_resets', 'expire' => 60, 'throttle' => 60, ], ], /* Defining Password Confirmation Timeout */ 'password_timeout' => 10800, ];

稍后,我们确保所有身份验证驱动程序都有一个用户提供程序。 这定义了如何从您的数据库或其他存储机制中检索用户以持久保存您的用户数据。 如果您有多个用户表或模型,则可以配置代表每个模型或表的多个源。 这些来源可以分配给您定义的任何额外的身份验证保护。

用户可能还想重置他们的密码。 为此,如果您在应用程序中有多个用户表或模型,并且希望根据特定用户类型进行单独设置,则可以指定多个密码重置配置。 到期时间是每个重置令牌有效的分钟数。 此安全功能使令牌的寿命很短,因此它们被猜测的时间更短。 您可以根据需要更改此设置。

最后,您必须定义密码确认超时之前的时间,并提示用户通过确认屏幕重新输入密码。 默认情况下,超时持续三个小时。

Laravel 身份验证方法的类型

没有完美的方法来验证每个场景,但了解它们将帮助您做出更好的决策。 这以及 Laravel 如何随着 Laravel 9 中的新功能而发展。这使得我们作为开发人员的工作在切换身份验证模式时更加容易。

基于密码的身份验证

作为一种对用户进行身份验证的基本方法,它仍然被成千上万的组织使用,但考虑到当前的发展,它显然已经过时了。

供应商必须执行复杂的密码实施,同时确保最终用户的摩擦最小。

它的工作非常简单,用户输入名称和密码,如果在数据库中这两者之间存在匹配项,则服务器决定对请求进行身份验证并让用户在预定义的时间内访问资源。

基于令牌的身份验证

在验证后向用户颁发唯一令牌的情况下使用此方法。

有了这个令牌,现在用户可以访问相关资源。 在令牌过期之前,特权一直处于活动状态。

当令牌处于活动状态时,用户不必使用任何用户名或密码,但在检索新令牌时,这两个是必需的。

今天,令牌被广泛用于多种场景,因为它们是包含所有身份验证数据的无状态实体。

提供一种将令牌生成与令牌验证分开的方法为供应商提供了很大的灵活性。

多重身份验证

顾名思义,它意味着至少使用两个身份验证因素,从而提高它提供的安全性。

与仅涉及两个因素的双因素身份验证不同,此方法可以涉及两个、三个、四个甚至更多……

此方法的典型实施涉及使用密码,之后用户会在其智能手机上收到验证码。 实施这种方法的供应商应该寻找误报和网络中断,这在快速扩展时可能会成为大问题。

如何实现 Laravel 身份验证

本节将教您多种验证应用程序用户身份的方法。 Jetstream、Breeze 和 Socialite 等一些库提供有关如何使用它们的免费教程。

手动认证

从注册用户开始,在routes/web.php中创建所需的路由

我们将创建两条路线,一条是查看表格,一条是注册:

 use App\Http\Contrllers\Auth\RegisterController; use Illuminate\Support\Facades\Route; /* Web Routes Register web routes for your app's RouteServiceProvider in a group containing the "web" middleware */ Route::get('/register', [RegisterController::class], 'create']); Route::post('/register', [RegisterController::class], 'store']);

并创建那些所需的控制器:

 php artisan make controller Auth/RegisterController -r

现在更新代码如下:

 namespace App\Http\Controllers\Auth; use App\Http\Controllers\Controller; use illuminate\Htpp\Request; class RegisterController extends Controller { public function create() { return view('auth.register'); } public function store(Request $request) { } }

控制器现在是空的,并返回一个视图进行注册。 让我们在resources/views/auth中创建该视图并将其命名为register.blade.php

用于注册用户的 Laravel 刀片视图。
用于注册用户的 Laravel 刀片视图。

现在一切就绪,我们应该访问我们的/register路由并查看以下表格:

 public function store(Request $request) { $credentials = $request->only('email', 'password'); if (Auth::attempt($credentials, $request->filled('remember'))) { $request->session()->regenerate(); return redirect()->intended('/'); } return back()->withErrors([ 'email' => 'The provided credentials do not match our records.', ]); }

现在我们可以显示一个用户可以完成并获取数据的表单,我们应该获取用户的数据,验证它,然后在一切正常的情况下将其存储在数据库中。 在这里你应该使用数据库事务来确保你插入的数据是完整的。

我们将使用 Laravel 的请求验证功能来确保需要所有三个凭据。 我们必须确保电子邮件具有电子邮件格式并且在users表中是唯一的,并且密码已确认且至少包含 8 个字符:

 namespace App\Http\Controllers\Auth; use App\Http\Controllers\Controller; use Illuminate\Foundation\Auth\User; use Illuminate\Http\Request; use Illuminate\Support\Facades\Hash; class RegisterController extends Controller { public function store(Request $request) { /* Validation */ $request->validate([ 'name' => 'required', 'email' => 'required|email|unique:users', 'password' => 'required|confirmed|min:8', ]); /* Database Insert */ $user = User:;create([ 'name' => $request->name, 'email' => $request->email, 'password' => Hash::make($request->password), ]); return back(); } public function create() { return view('auth.register'); } }

现在我们的输入已经过验证,任何违反我们验证的内容都会抛出一个错误,该错误将显示在表单中:

用于注册的无效输入示例
用于注册的无效输入示例

假设我们已经在store方法中创建了一个用户帐户,我们还想登录该用户。 我们有两种方法可以做到这一点。 我们可以手动完成或使用Auth facade

用户登录后,我们不应该将他们返回到注册屏幕,而是返回到一个新页面,如仪表板或主页。 这就是我们要做的:

 namespace App\Http\Controllers\Auth; use App\Http\Controllers\Controller; use App\Providers\RouteServiceProvider; use Illuminate\Foundation\Auth\User; use Illuminate\Http\Request; use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\Hash; class RegisterController extends Controller { public function store(Request $request) { /* Validation */ $request->validate([ 'name' => 'required', 'email' => 'required|email|unique:users', 'password' => 'required|confirmed|min:8', ]); /* Database Insert */ $user = User:;create([ 'name' => $request->name, 'email' => $request->email, 'password' => Hash::make($request->password), ]); Auth::login($user): return redirect(RouteServiceProvider::HOME); } public function create() { return view('auth.register'); } }

现在我们有一个用户注册并登录-n ,我们应该确保他可以安全注销。

Laravel 建议我们在注销后使会话无效并重新生成令牌以确保安全。 而这正是我们要做的。 我们首先使用LogoutController 的destroy方法创建一个新的/logout路由:

 use App\Http\Controllers\Auth\RegisterController; use App\Http\Controllers\Auth\LogoutController; use Illuminate\Support\Facades\Route; /* Web Routes Here is where you can register web routes for your application. These routes are loaded by the RrouteServiceProvider with a group which contains the "web" middleware group. Now create something great! */ Route::get('/register', [RegisterController::class, 'create']); Route::post('/register', ['RegisterController::class, 'store']); Route::post('/logout', [Logoutcontroller::class, 'destroy']) ->middleware('auth');

通过“auth”中间件传递注销非常重要。 如果用户未登录,则他们应该无法访问该路由。

现在,像以前一样创建一个控制器:

 php artisan make:controller Auth/LogoutController -r

我们可以确保我们在destroy方法中将请求作为参数获取。 我们通过 Auth facade 注销用户,使会话无效并重新生成令牌,然后将用户重定向到主页:

 namespace App\Http\Controllers\Auth; use App\Http\Controllers\Controller; use Illuminate\Http\Request; use Illuminate\Support\Facades\Auth; class LogoutController extends Controller { public function destroy(Request $request) { Auth::logout(); $request->session()->invalidate(); $request->session()->regenerateToken(); return redirect('/'); } }

记住用户

大多数(如果不是全部)现代 Web 应用程序在其登录表单上提供“记住我”复选框。

如果我们想提供“记住我”的功能,我们可以将布尔值作为第二个参数传递给 attempt 方法。

当有效时,Laravel 将无限期地保持用户身份验证或直到他们被手动注销。 用户表必须包含字符串remember_token (这就是我们重新生成令牌的原因)列,我们将在其中存储“记住我”令牌。

用户的默认迁移已包含它。

首先,您必须将Remember Me字段添加到您的表单中:

记住我字段形式
添加记住我字段来自。

在此之后,从请求中获取凭据并在 Auth facade 的 attempt 方法中使用它们。

如果应该记住该用户,我们将让他登录并将他重定向到我们的主页。 否则,我们将抛出一个错误:

 public function store(Request $request) { $credentials = $request->only('email', 'password'); if (Auth::attempt($credentials, $request->filled('remember'))) { $request->session()->regenerate(); return redirect()->intended('/'); } return back()->withErrors([ 'email' =>

重置密码

今天的大多数网络应用程序都为用户提供了重置密码的方法。

我们将为忘记的密码创建另一条路线并像我们一样创建控制器。 此外,我们将为重置密码链接添加一个路由,其中​​包含整个过程的令牌:

 Route::post('/forgot-password', [ForgotPasswordLinkController::class, 'store']); Route::post('/forgot-password/{token}', [ForgotPasswordController::class, 'reset']);

在 store 方法中,我们将从请求中获取电子邮件并像我们所做的那样对其进行验证。

在此之后,我们可以使用 password facade 中的sendResetLink方法。

然后,作为响应,如果它成功发送链接或错误,我们希望返回状态:

 namespace App\Http\Controllers\Auth; use App\Http\Controllers\Controller; use Illuminate\Http\Request; use Illuminate\Support\Facades\Password; class ForgotPasswordLinkController extends Controller { public function store(Request $request) { $request->validate([ 'email' => 'required|email', ]); $status = Password::sendResetLink( $request->only('email'); ); return $status === Password::RESET_LINK_SENT ? back()->with('status', __($status)) : back()->withInput($request->only('email'))->withErrors(['email' => __($status)]); } }

现在重置链接已经发送到用户的电子邮件中,我们应该注意之后发生的事情的逻辑。

我们将在请求中获取令牌、电子邮件和新密码并验证它们。

在此之后,我们可以使用密码门面的重置方法让 Laravel 处理幕后的一切。

我们总是会对密码进行哈希处理以确保其安全。

最后,我们将检查密码是否已重置,如果是,我们会将用户重定向到登录屏幕并显示一条成功消息。 否则,我们会显示无法重置的错误:

 namespace App\Http\Controllers\Auth; use App\Http\Controllers\Controller; use Illuminate\Http\Request; use Illuminate\Support\Facades\Hash; use Illuminate\Support\Facades\Password; use Illuminate\Support\Str; class ForgotPasswordController extends Controller { public function store(Request $request) { $request->validate([ 'token' => 'required', 'email' => 'required|email', 'password' => 'required|string|confirmed|min:8', ]); $status = Password::reset( $request->only('email', 'password', 'password_confirmation', 'token'), function ($user) use ($request) { $user->forceFill( 'password' => Hash::make($request->password), 'remember_token' => Str::random(60) ])->save(); } ); return $status == Password::PASSWORD_RESET ? redirect()->route('login')->with('status', __($status)) : back()->withInput($request->only('email'))->withErrors(['email' => __($status)]); } }

Laravel 微风

Laravel Breeze 是 Laravel 身份验证功能的简单实现:登录、注册、密码重置、电子邮件验证和密码确认。 您可以使用它在新的 Laravel 应用程序中实现身份验证。

安装和设置

创建 Laravel 应用程序后,您要做的就是配置数据库、运行迁移并通过 composer 安装 laravel/breeze 包:

 composer require laravel/breeze –dev

在此之后,运行以下命令:

 php artisan breeze:install

它将发布您的身份验证视图、路由、控制器和它使用的其他资源。 完成此步骤后,您就可以完全控制 Breeze 提供的所有内容。

现在我们必须将我们的应用程序渲染到前端,所以我们将安装我们的 JS 依赖项(将使用@vite):

 npm install

:

 npm run dev

在此之后,登录和注册链接应该在您的主页上,一切都应该顺利进行。

Laravel 喷射流

Laravel Jetstream 使用有用的功能和其他前端堆栈扩展了 Laravel Breeze。

它提供登录、注册、电子邮件验证、双因素身份验证、会话管理、通过 Sanctum 的 API 支持以及可选的团队管理。

安装 Jetstream 时,您必须在前端的 Livewire 和 Inertia 之间进行选择。 在后端,它使用 Laravel Fortify,它是 Laravel 的前端不可知的“无头”身份验证后端。

安装和设置

我们将在我们的 Laravel 项目中通过 composer 安装它:

 composer require laravel/jetstream

在此之后,我们将运行php artisan jetstream:install [stack]命令,它接受[stack]参数LivewireInertia 。 您可以通过–team选项来启用团队功能。

这还将安装 Pest PHP 以进行测试。

最后,我们必须使用以下内容渲染应用程序的前端:

 npm install npm run dev

Laravel 强化

Laravel Fortify 是一种与前端无关的后端身份验证实现。 您不必使用 Laravel Fortify 来实现 Laravel 的身份验证功能。

它还用于 Breeze 和 Jetstream 等入门套件。 您也可以单独使用 Fortify,它只是一个后端实现。 如果您独立使用它,您的前端必须调用 Fortify 路由。

安装和设置

我们可以通过 composer 安装 Fortify:

 composer require laravel/fortify

现在我们必须发布 Fortify 的资源:

 php artisan vendor:publish –provider="Laravel\Fortify\FortifyServiceProvider"

在此之后,除了新的FortifyServiceProvider 、配置文件和数据库迁移之外,我们还将创建一个新的app/Actions目录。

最后,运行:

 php artisan migrate

或者:

 php artisan migrate:fresh

您的 Fortify 已准备就绪,可以使用了。

Laravel 社交名媛

Laravel 包含一个简单的基于 OAuth 的用户身份验证功能。 它支持通过 Facebook、Twitter、LinkedIn、Google、Bitbucket、GitHub 和 GitLab 进行社交登录。

安装

我们可以通过composer来安装它:

 composer require laravel/socialite

设置和使用

安装后,我们必须为我们的应用程序使用的 OAuth 提供程序添加凭据。 我们将为每项服务将它们添加到config/services.php中。

在配置中,我们应该将密钥与之前的服务进行匹配。 其中一些键包括:

  • Facebook
  • 推特(对于 OAuth 1.0)
  • twitter-oauth-2(对于 OAuth 2.0)
  • 领英
  • 谷歌
  • 知乎
  • GitLab
  • 比特桶

一种服务配置可能如下所示:

 'google' => [ 'client_id' => env("GOOGLE_CLIENT_ID"), 'client_secret' => env("GOOGLE_CLIENT_SECRET"), 'redirect' => "http://example.com/callback-url", ],

验证用户

对于此操作,我们将需要两条路线,一条用于将用户重定向到 OAuth 提供程序:

 use Laravel\Socialite\Facades\Sociliate; Route::get('/auth/redirect', function () { return Socialite:;driver('google')->redirect(); });

一个用于身份验证后来自提供商的回调:

 use Laravel\Socialite\Facades\Socialite; Route:;get('/auht/callback', function () { $user = Socialite:;driver('google')->user(); // Getting the user data $user->token; });

Socialite 提供重定向方法,外观将用户重定向到 OAuth 提供程序,而用户方法检查传入请求并检索用户信息。

收到用户后,我们必须检查它是否存在于我们的数据库中并对其进行身份验证。 如果不存在,我们将创建一个新记录来代表用户:

 use App\Models\User; use Illuminate\Support\Facades\Auth; use Laravel\Socialite\Facades\Socialite; Route::get('/auth/callback', function () { /* Get the user */ $googleUser = Socialite::driver('google')->user(); /* Create the user if it does not exist Update the user if it exists Check for google_id in database */ $user = User::updateOrCreate([ 'google_id' => $googleUser->id, ], [ 'name' => $googleUser->name, 'email' => $googleUser->email, 'google_token' => $googleUser->token, 'google_refresh_token' => $googleUser->refreshToken, ]); /* Authenticates the user using the Auth facade */ Auth::login($user); return redirect('/dashboard'); });

如果我们想限制用户的访问范围,我们可以使用scopes方法,我们将把它包含在身份验证请求中。 这会将所有先前指定的范围与指定的范围合并。

另一种方法是使用覆盖所有其他现有范围的setScopes方法:

 use Laravel\Socialite\Facades\Socialite; return Socialite::driver('google') ->scopes(['read:user', 'write:user', 'public_repo']) ->redirect(); return Socialite::driver('google') ->setScopes(['read:user', 'public_repo') ->redirect();

现在我们知道了一切以及如何在回调后获取用户,让我们看一下我们可以从中获取的一些数据。

OAuth1 用户有tokentokenSecret

 $user = Socialite::driver('google')->user(); $token = $user->token; $tokenSecret = $user->tokenSecret;

OAuth2 提供了tokenrefreshTokenexpiresIn

 $user = Socialite::driver('google')->user(); $token = $user->token; $refreshToken = $user->refreshToken; $expiresIn = $user->expiresIn;

OAuth1 和 OAuth2 都提供了getIdgetNicknamegetNamegetEmailgetAvatar

 $user = Socialite::driver('google')->user(); $user->getId(); $user->getNickName(); $user->getName(); $user->getEmail(); $user->getAvatar();

如果我们想从令牌(OAuth 2)或令牌和秘密(OAuth 1)中获取用户详细信息,sanctum 为此提供了两种方法: userFromTokenuserFromTokenAndSecret

 use Laravel\Socialite\Facades\Socialite; $user = Socialite:;driver('google')->userFromToken($token); $user = Socialite::driver('twitter')->userFromTokenAndSecret($token, $secret);

Laravel 圣殿

Laravel Sanctum 是一个用于 SPA(单页应用程序)和移动应用程序的轻型身份验证系统。 它允许用户生成具有特定范围的多个 API 令牌。 这些范围通过令牌指定允许的操作。

用法

Sanctum 可用于向用户颁发 API 令牌,而无需 OAuth 的复杂性。 这些令牌通常有很长的到期时间,例如数年,但可以随时由用户撤销和重新生成。

安装和设置

我们可以通过 composer 安装它:

 composer require laravel/sanctum

我们必须发布配置和迁移文件:

 php artisan vendor:publish –provider="Laravel\Sanctum\SanctumServiceProvider"

现在我们已经生成了新的迁移文件,我们必须迁移它们:

 php artisan migrate </code> or <code> php artisan migrate:fresh

如何发行 API 令牌

在发行令牌之前,我们的用户模型应该使用Laravel\Sanctum\HasApiTokens特性:

 use Laravel\Sanctum\HasApiTokens; class User extends Authenticable { use HasApiTokens; }

当我们有用户时,我们可以通过调用createToken方法发出一个令牌,该方法返回一个Laravel\Sanctum\NewAccessToken实例。

我们可以在NewAccessToken实例上调用plainTextToken方法来查看令牌的SHA-256纯文本值。

Laravel 身份验证的技巧和最佳实践

在其他设备上使会话无效

正如我们之前所讨论的,当用户注销时使会话无效是至关重要的,但这也应该作为所有拥有的设备的一个选项。

当用户更改或更新他们的密码时,通常会使用此功能,并且我们希望通过任何其他设备使他们的会话无效。

提供了 Auth facade,这是一个很容易实现的任务。 考虑到我们使用的路由有authauth.session middleware ,我们可以使用门面的logoutOtherDevices静态方法:

 Route::get('/logout', [LogoutController::class, 'invoke']) ->middleware(['auth', 'auth.session']);
 use Illuminate\Support\Facades\Auth; Auth::logoutOtherDevices($password);

配置 Auth::routes()

Auth facade 的 routes 方法只是一个帮助程序,用于生成用户身份验证所需的所有路由。

路由包括登录(Get、Post)、注销(Post)、注册(Get、Post)和密码重置/电子邮件(Get、Post)。

当您在外观上调用方法时,它会执行以下操作:

 public static fucntion routes(array $options = []) { if (!static::$app->providerIsLoaded(UiServiceProvider::class)) { throw new RuntimeException('In order to use the Auth:;routes() method, please install the laravel/ui package.'); } static::$app->make('router')->auth($options); }

我们感兴趣的是在路由器上调用静态方法时会发生什么。 由于 facades 的工作方式,这可能会很棘手,但调用的以下方法是这样的:

 /** Register the typical authentication routes for an application. @param array $options @return void */ public function auth(array $options = []) { // Authentication Routes... $this->get('login', 'Auth\[email protected]')->name('login'); $this->post('login', 'Auth\[email protected]'); $this->post('logout', 'Auth\[email protected]')->name('logout'); // Registration Routes... if ($options['register'] ?? true) { $this->get('register', 'Auth\[email protected]')->name('register'); $this->post('register', 'Auth\[email protected]'); } // Password Reset Routes... if ($options['reset'] ?? true) { $this->resetPassword(); } // Email Verification Routes... if ($options['verify'] ?? false) { $this->emailVerification(); } }

默认情况下,它会生成除电子邮件验证之外的所有路由。 我们将始终拥有登录和注销路由,但我们可以通过选项数组控制其他路由。

如果我们只想登录/注销和注册,我们可以传递以下选项数组:

 $options = ["register" => true, "reset" => false, "verify" => false];

保护路线和海关警卫

我们想确保某些路由只能由经过身份验证的用户访问,并且可以通过在 Route facade 上添加调用中间件方法或在其上链接中间件方法来快速完成:

 Route::middleware('auth')->get('/user', function (Request $request) { return $request->user(); }); Route::get('/user', function (Request $request) { return $request->user(); })->middleware('auth');

这个守卫确保传入的请求经过身份验证。

确认密码

为了增加网站的安全性,您通常希望在继续执行任何其他任务之前确认用户的密码。

我们必须从确认密码视图定义一个路由来处理请求。 它将验证并将用户重定向到他们的预期目的地。 同时,我们将确保我们的密码在会话中显示为已确认。 默认情况下,密码必须每三个小时重新确认一次,但这可以在config/auth.php的配置文件中更改:

 use Illuminate\Http\Request; use Illuminate\Support\Facades\Hash; use Illuminate\Support\Facades\Redirect; Route::post('/confirm-password', function (Request $request) { if (!Hash::check($request->password, $request->user()->password)) { return back()->withErrors([ 'password' => ['The provided password does not match our records.'] ]); } $request->session()->passwordConfirmed(); return redirect()->intended(); })->middleware(['auth']);

可验证合同

位于 Illuminate\Contracts\Auth 的 Authenticable 合约定义了 UserProvider facade 应该实现的蓝图:

 namespace Illuminate\Contracts\Auth; interface Authenticable { public function getAuthIdentifierName(); public function getAuthIdentifier(); public function getAuthPassord(); public function getRememberToken(); public function setRememberToken($value); public function getrememberTokenName(); }

该接口允许身份验证系统与实现它的任何“用户”类一起工作。

无论使用什么 ORM 或存储层,这都适用。 默认情况下,Laravel 有 App\Models\User 实现了这个接口,这在配置文件中也可以看到:

 return [ 'providers' => [ 'users' => [ 'driver' => 'eloquent', 'model' => App\Models\User::class, ], ], ];

身份验证事件

在整个身份验证过程中会分派大量事件。

根据您的目标,您可以将侦听器附加到您的 EventServiceProvider

Laravel 监听器
为我们的身份验证服务生成的 Laravel 监听器列表

快速创建新用户

可以通过App\User快速创建新用户:

 $user = new App\User(); $user->password = Hash::make('strong_password'); $user->email = '[email protected]'; $user->name = 'Username'; $user->save();

或者通过 User facade 上的 create static 方法:

 User::create([ 'password' => Hash::make('strong-password'), 'email' => '[email protected]', 'name' => 'username' ]);

概括

Laravel 生态系统有很多入门工具包,可以让您的应用程序使用身份验证系统启动和运行,例如 Breeze 和 Jetstream。 它们是高度可定制的,因为代码是在我们这边生成的,我们可以根据需要对其进行修改,如果需要,可以将其用作蓝图。

关于身份验证及其复杂性存在许多安全问题,但所有这些都可以通过 Laravel 提供的工具轻松解决。 这些工具可高度定制且易于使用。

使用我们快速的 Laravel 托管服务快速高效地部署您的 Laravel 应用程序。 通过免费试用查看您的应用程序的运行情况。