Docs 菜单
Docs 主页
/ / /
Laravel MongoDB

用户身份认证

在此页面上

  • 概述
  • 修改用户模型
  • 例子
  • 创建用户控制器
  • 例子
  • 自定义用户身份验证
  • Laravel Sanctum
  • 密码提醒
  • 更多信息

在本指南中,您可以了解如何使用 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文件:

<?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()函数来管理用户身份验证,如以下代码所示:

<?php
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 是一个身份验证包,可以管理 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:

<?php
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 模型类指南。

后退

查询构建器

来年

缓存和锁