我认为 Laravel sanctum 是创建单页 api 身份验证的好选择。出于这个原因,我将向您展示如何使用 laravel 9 sanctum API 身份验证示例。从这个 Laravel 9 sanctum 教程中,您将学习使用 sanctum 的 laravel 9 REST API 身份验证系统。完成本教程后,我们可以看到 laravel 9 sanctum spa API 示例。
第 1 步:安装 Laravel 9
第一步,我们需要获取一个新的 Laravel 9 应用程序来进行我们的 laravel sanctum spa 身份验证,因此打开您的终端或命令提示符并运行以下命令:
composer create-project --prefer-dist laravel/laravel ApiAuth
第 2 步:安装Sanctum
Laravel9已经默认安装,其它版本如果没有安装Sanctum, 我们可以通过 Composer 包管理器安装 Laravel Sanctum。安装它的命令很有趣:
composer require laravel/sanctum
然后运行配置文件:
php artisan vendor:publish --provider="Laravel\Sanctum\SanctumServiceProvider"
生成迁移数据,也就是在数据库中创建表:
php artisan migrate
接下来,如果您打算使用 Sanctum 对 SPA 进行身份验证,则应将 Sanctum 的中间件添加到 api 应用程序的中间件组中。 app/Http/Kernel.php
/app/Http/Kernel.php
'api' => [
\Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class,
'throttle:api',
\Illuminate\Routing\Middleware\SubstituteBindings::class,
],
步骤 3:配置用户模型
在我们将用于圣所的模型中,必须像下面这样配置。添加 Sanctum 的 HasApiTokens 类,在 auth.php 中,我们添加了 api auth 配置。
app/Models/User.php
namespace App\Models;
use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
use Laravel\Sanctum\HasApiTokens;
class User extends Authenticatable
{
use HasFactory, Notifiable, HasApiTokens;
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [
'name',
'email',
'password',
];
/**
* The attributes that should be hidden for arrays.
*
* @var array
*/
protected $hidden = [
'password',
'remember_token',
];
/**
* The attributes that should be cast to native types.
*
* @var array
*/
protected $casts = [
'email_verified_at' => 'datetime',
];
}
第 4 步:创建 API 路由
在这一步中,我们需要创建 API 路由。Laravel 提供了一个 api.php 文件用于编写 Web API 路由。因此,让我们在该文件上创建以下路由。
/routes/api.php
use App\Http\Controllers\AuthController;
use Illuminate\Support\Facades\Route;
// Public routes
Route::post('/register', [AuthController::class, 'register']);
Route::post('/login', [AuthController::class, 'login']);
// Protected routes
Route::group(['middleware' => ['auth:sanctum']], function () {
Route::post('/logout', [AuthController::class, 'logout']);
});
第 5 步:创建控制器
是时候在我们的控制器中编写我们的身份验证代码了。创建控制器并将以下代码粘贴到该控制器中
/app/Http/Controllers/AuthController.php
namespace App\Http\Controllers;
use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Hash;
class AuthController extends Controller
{
public function register(Request $request) {
$fields = $request->validate([
'name' => 'required|string',
'email' => 'required|string|unique:users,email',
'password' => 'required|string|confirmed'
]);
$user = User::create([
'name' => $fields['name'],
'email' => $fields['email'],
'password' => bcrypt($fields['password'])
]);
$token = $user->createToken('myapptoken')->plainTextToken;
$response = [
'user' => $user,
'token' => $token
];
return response($response, 201);
}
public function login(Request $request) {
$fields = $request->validate([
'email' => 'required|string',
'password' => 'required|string'
]);
// Check email
$user = User::where('email', $fields['email'])->first();
// Check password
if(!$user || !Hash::check($fields['password'], $user->password)) {
return response([
'message' => 'Bad creds'
], 401);
}
$token = $user->createToken('myapptoken')->plainTextToken;
$response = [
'user' => $user,
'token' => $token
];
return response($response, 201);
}
public function logout(Request $request) {
auth()->user()->tokens()->delete();
return [
'message' => 'Logged out'
];
}
}
一切准备就绪。现在启动您的服务器并打开您的邮递员来测试我们的 sanctum 身份验证 api。
注册 API
API:http://127.0.0.1:8000 /api/register
请求:POST
登录接口
API:http://127.0.0.1:8000 /api/login
请求:POST
在测试注销 api 之前,请确保详细 api 我们将使用以下标题,如下所示:
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.$accessToken,
]
注销接口
API:http://127.0.0.1 :8000/api/logout
请求:POST
The Posts
- Laravel 9 基于自定义令牌的 Api 身份验证教程May 14, 2022
- 使用Laravel9的Sanctum REST API 身份验证示例May 14, 2022
- Laravel9的HttpBasicAuth基本认证May 9, 2022