用户身份认证
概述
在本指南中,您可以了解如何使用 Laravel 的原生身份验证功能对 MongoDB 用户进行身份验证。
Laravel 提供原生Auth
模块,其中包括身份验证服务,例如定义如何对用户进行身份验证的防护以及定义如何检索用户的提供程序。要了解有关这些服务的详情,请参阅 身份验证 在 Laravel 文档中。
修改用户模型
默认情况下,Laravel 会在App/Models
目录中生成User
Eloquent 模型。要为 MongoDB 用户启用身份验证,您的User
模型必须扩展MongoDB\Laravel\Auth\User
类。
要扩展此类,请导航到app/Models/User.php
文件并将use Illuminate\Foundation\Auth\User as Authenticatable
语句替换为以下代码:
use MongoDB\Laravel\Auth\User as Authenticatable;
接下来,确保您的User
类扩展了Authenticatable
,如以下代码所示:
class User extends Authenticatable { ... }
配置User
模型后,创建相应的控制器。要了解如何创建控制器,请参阅本页的创建用户控制器部分。
例子
以下代码显示了扩展MongoDB\Laravel\Auth\User
类的User.php
文件:
namespace App\Models; use MongoDB\Laravel\Auth\User as Authenticatable; class User extends Authenticatable { protected $connection = 'mongodb'; protected $collection = 'users'; protected $fillable = [ 'name', 'email', 'password', ]; protected $hidden = [ 'password', 'remember_token', ]; }
创建用户控制器
要存储管理身份验证的函数,请为User
模型创建身份验证控制器。
从项目根目录运行以下命令以创建控制器:
php artisan make:controller <filename>
例子
以下命令创建一个名为AuthController.php
的控制器文件:
php artisan make:controller AuthController
AuthController.php
文件可以存储login()
和logout()
函数来管理用户身份验证,如以下代码所示:
namespace App\Http\Controllers; use Illuminate\Http\Request; use Illuminate\Support\Facades\Auth; use Illuminate\Validation\ValidationException; use function response; class AuthController extends Controller { public function login(Request $request) { $request->validate([ 'email' => 'required|email', 'password' => 'required', ]); if (Auth::attempt($request->only('email', 'password'))) { return response()->json([ 'user' => Auth::user(), 'message' => 'Successfully logged in', ]); } throw ValidationException::withMessages([ 'email' => ['The provided credentials are incorrect.'], ]); } public function logout() { Auth::logout(); return response()->json(['message' => 'Successfully logged out']); } }
自定义用户身份验证
您可以自定义身份验证文件,以满足应用程序的需求,并启用其他身份验证功能。
本节介绍如何使用以下功能自定义 MongoDB 用户身份验证过程:
Laravel Sanctum
Laravel Sanctum 是一个身份验证包,可以管理 API 请求和单页面应用程序身份验证。为了管理 API 请求,Sanctum 会颁发存储在数据库中的 API 令牌,并使用Authorization
标头对传入的 HTTP 请求进行身份验证。为了对单页面应用程序进行身份验证,Sanctum 使用 Laravel 基于 cookie 的身份验证服务。
您可以安装 Laravel Sanctum 来管理应用程序的身份验证过程。从项目根目录运行以下命令来安装 Laravel Sanctum 并发布其迁移文件:
composer require laravel/sanctum php artisan vendor:publish --provider="Laravel\Sanctum\SanctumServiceProvider"
要将 Laravel Sanctum 与 Laravel MongoDB 一起使用,请修改 Sanctum 提供的PersonalAccessToken
模型以使用MongoDB\Laravel\Eloquent
命名空间中的DocumentModel
特征。以下代码修改PersonalAccessToken
模型以启用 MongoDB:
namespace App\Models; use Laravel\Sanctum\PersonalAccessToken as SanctumToken; use MongoDB\Laravel\Eloquent\DocumentModel; class PersonalAccessToken extends SanctumToken { use DocumentModel; protected $connection = 'mongodb'; protected $collection = 'personal_access_tokens'; protected $primaryKey = '_id'; protected $keyType = 'string'; }
接下来,运行以下命令修改数据库模式:
php artisan migrate
现在,您可以通过调用应用程序的服务提供程序之一中的PersonalAccessToken
方法来指示 Sanctum 使用自定义usePersonalAccessTokenModel()
模型。要了解更多信息,请参阅 覆盖默认模型 在 Laravel Sanctum 指南中。
提示
要了解有关DocumentModel
特征的更多信息,请参阅 Eloquent 模型类指南中的扩展第三方模型类。
密码提醒
要添加对基于 MongoDB 的密码提醒的支持,请在应用程序中注册以下服务提供商:
MongoDB\Laravel\Auth\PasswordResetServiceProvider::class
此服务提供商修改内部DatabaseReminderRepository
以启用密码提醒。
例子
以下代码更新 Laravel 应用程序bootstrap
目录中的providers.php
文件以注册PasswordResetServiceProvider
提供程序:
return [ App\Providers\AppServiceProvider::class, MongoDB\Laravel\MongoDBServiceProvider::class, MongoDB\Laravel\Auth\PasswordResetServiceProvider::class ];
更多信息
要了解有关用户身份验证的更多信息,请参阅 身份验证 在 Laravel 文档中。
要了解有关 Eloquent 模型的更多信息,请参阅Eloquent 模型类指南。