Laravel Sanctum 实现 API 登录注册的核心是使用 token 认证而非 session:1. 安装迁移并配置 api guard 为 sanctum;2. 注册时创建用户并返回 createToken()->plainTextToken;3. 登录时先 attempt() 校验再生成新 token;4. 路由加 auth:sanctum 中间件,前端带 Bearer Token 请求。

用 Laravel Sanctum 实现接口登录注册,核心是把 Sanctum 当作无状态的 API 认证方案来用——它不依赖 session,而是靠 token(存储在数据库) + Bearer Header 验证。下面直接说关键步骤和常见写法。
1. 安装并配置 Sanctum
先安装 Sanctum:
- composer require laravel/sanctum
- php artisan vendor:publish --provider="Laravel\Sanctum\SanctumServiceProvider"
- php artisan migrate
确保 config/auth.php 中的 api guard 使用 sanctum driver:
'api' => [
'driver' => 'sanctum',
'provider' => 'users',
],
2. 注册接口(返回 token)
注册时创建用户,并用 createToken() 生成 token。注意:token 名字只是标识(比如 'api-token'),不参与验证逻辑。
- 控制器中接收邮箱、密码等字段
- 校验数据(用
validate()或 Form Request) - 创建用户后调用
$user->createToken('api-token')->plainTextToken - 返回 token(不要存 plainTextToken 到数据库!只返回一次给前端)
示例代码片段:
$user = User::create([
'name' => $request->name,
'email' => $request->email,
'password' => Hash::make($request->password),
]);
return response()->json([
'token' => $user->createToken('api-token')->plainTextToken,
]);
3. 登录接口(验证账号密码,返回 token)
登录不是“发个 token 就完事”,要先用 Auth::attempt() 校验凭证,成功后再生成 token。
- 检查
email和password是否存在且合法 - 调用
Auth::attempt(['email' => ..., 'password' => ...]) - 若成功,用
auth()->user()->createToken(...)创建新 token - 推荐每次登录都生成新 token(避免 token 复用或长期有效)
注意:别用 Auth::login(),那是为 session 设计的,对 API 无效。
4. 保护接口路由 & 获取当前用户
在 routes/api.php 中加中间件 auth:sanctum:
Route::middleware('auth:sanctum')->get('/user', function (Request $request) {
return $request->user(); // 自动解析出当前登录用户
});
前端请求时,在 Header 加上:
Authorization: Bearer {your-token-here}
Sanctum 会自动从 tokenable_id 查用户,无需手动解 token 或验签。
不复杂但容易忽略:token 是一次性明文返回的,前端需安全保存(如 HttpOnly Cookie 不适用,推荐存 memory 或 secure storage);登出时调用 $request->user()->currentAccessToken()->delete() 即可废止当前 token。











