大家好~
今天要来使用 Laravel Sanctum 实作会员系统!
使用 php artisan make:controller
建立一个 AuthController。
在刚刚建立的 AuthController 内 use App\Models\User
与其他会用到的 class。
use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Hash;
use Illuminate\Http\Response;
是个人习惯,
该 class extends vendor/symfony/http-foundation/Response.php
,
vendor/symfony/http-foundation/Response.php
内定义了 HTTP Status Code 常量。
下图为 vendor/symfony/http-foundation/Response.php
内部分截图。
public function register(Request $request)
{
$validated = $request->validate([
'name' => 'required|string',
'email' => 'required|email|unique:users,email',
'password' => 'required|string|min:8',
]);
$user = User::create([
'name' => $validated['name'],
'email' => $validated['email'],
'password' => Hash::make($validated['password'])
]);
$token = $user->createToken('token')->plainTextToken;
return [
'user' => $user,
'token' => $token
];
}
Laravel Validation 提供许多验证规则使我们可以轻松的对 Request 内的表单验证。
Laravel 预设会是使用 bcrypt 做 hash。
Laravel 支援 bcrypt、argon、argon2id,
可以在 config/hashing.php
做变更。
vendor/laravel/framework/src/Illuminate/Hashing/HashManager.php
使用 HasApiTokens 这个 trait 内的 createToken() 为 user 建立 token。
下图是 createToken() 的原始码。
使用 plainTextToken 可以调用未 hash 前的 token。
public function login(Request $request)
{
$validated = $request->validate([
'email' => 'required|email',
'password' => 'required|string|min:8'
]);
$user = User::where('email', $validated['email'])->first();
if (!$user || !Hash::check($validated['password'], $user['password'])) {
return response([
'message' => 'The provided credentials are incorrect.'
], Response::HTTP_UNAUTHORIZED);
}
$token = $user->createToken('apiToken')->plainTextToken;
return response([
'user' => $user,
'token' => $token
], Response::HTTP_CREATED);
}
使用 Hash::check() 将 Request 内的 password 与 资料库内 Hash 过的 password 进行比对。
第一个参数为未 hash 的,
第二个参数为已 hash 过的。
vendor/laravel/framework/src/Illuminate/Hashing/HashManager.php
public function logout()
{
Auth::user()->tokens()->delete();
return response([
'message' => 'Logged out.'
],Response::HTTP_OK);
}
Auth::user() 可以取得已认证的 User,
然後使用 HasApiTokens trait 提供的 tokens 关联关系从数据库删除 token。
那麽会员的注册、登入、登出就完成了!
明天再来帮会员系统设定 Routes 并且用 Postman 测试会员系统吧!
大家明天见啦~
若文章有任何问题,
还请大家不吝赐教!
<<: [Lesson2] Android Studio安装
问题回答 $nextTick 的作用是等待画面更新後才执行程序,因为有些时候我们需要操作画面上的 D...
在人脸辨识中,常见的是用影像的方式来进行辨识,利用摄影机的方式来撷取影像,利用相似的方式让测试者与资...
用D3绘制长条图 我们现在可以尝试着用已经学到的SVG来画长条图,只不过是透过D3Js的操作来新增S...
前言 今日的程序码 => GIHUB 说明 这是一个网路判断的一个范例,将会使用 data_c...
前面有特别提到,redis这类应用程序如果需要保持资料持久化,不会因为重启pod造成资料消失,就必须...