环境是PHP8.2.9+Laravel10
我这边打算用Laravel10+Vue3前后端隔离,通过Json互通数据。
Laravel10的话我用sanctum来判断用户是否登录,但是我不了解这个API验证是一个怎么样的一个过程,用户登录了生成一个TOKEN,这个token保存在哪里?后续的要获取相关信息的话,怎么通过token来判断是否登录呢????
整个流程我都不太明白,有哪位大哥可以解释解释吗?
我这边已经弄好sanctum插件了,也生成好相关的表了,就是不太懂整个流程是怎么样的?
环境是PHP8.2.9+Laravel10
我这边打算用Laravel10+Vue3前后端隔离,通过Json互通数据。
Laravel10的话我用sanctum来判断用户是否登录,但是我不了解这个API验证是一个怎么样的一个过程,用户登录了生成一个TOKEN,这个token保存在哪里?后续的要获取相关信息的话,怎么通过token来判断是否登录呢????
整个流程我都不太明白,有哪位大哥可以解释解释吗?
我这边已经弄好sanctum插件了,也生成好相关的表了,就是不太懂整个流程是怎么样的?
Sanctum API Token 认证流程详解(Laravel+Vue 前后端分离场景):
Token生成阶段
// 登录控制器
public function login(Request $request)
{
$credentials = $request->validate([
'email' => 'required|email',
'password' => 'required'
]);
if (!Auth::attempt($credentials)) {
return response()->json(['message' => 'Invalid credentials'], 401);
}
// 生成API Token(返回普通token)
$token = $request->user()->createToken('vue3-token')->plainTextToken;
return response()->json([
'token' => $token,
'user' => Auth::user()
]);
}
personal_access_tokens
表(sanctum生成)localStorage
或sessionStorage
请求携带Token
// Vue3请求示例(axios)
axios.get('/api/user', {
headers: {
Authorization: `Bearer ${localStorage.getItem('token')}`
}
})
Laravel验证流程
// 路由保护(routes/api.php)
Route::middleware('auth:sanctum')->group(function () {
Route::get('/user', function (Request $request) {
return $request->user();
});
});
验证过程:
$request->user()
获取认证用户关键配置项
SESSION_DRIVER=cookie
SANCTUM_STATEFUL_DOMAINS=your-frontend-domain.com
注销处理
// 注销控制器
public function logout(Request $request)
{
$request->user()->currentAccessToken()->delete();
return response()->json(['message' => 'Logged out']);
}
补充说明:
默认情况下, Token 需要通过 Request Header,进行传递,根据不同的请求包自行传就好了。
这个 Token 是有状态的,在 personal_access_tokens 表中存放,也提供的有相关的 API 来管理 Token。
对于需要用户登录后可见的接口或页面,使用
auth:sanctum
中间件进行保护就好了,或者把 sanctum 设置为默认的 guard。大致流程官网的 文档 上已经提到了的。
用户名、密码通过验证后,生成 Token 返回给前端,然后前端保存这个 Token,后续请求再带上就好了。