RouteNotFoundException [登录] Laravel Sanctum
RouteNotFoundException [login] Laravel Sanctum
我目前正在学习 Laravel 并使用 Sanctum 执行身份验证。
我有一条路由在 /register 和 /login 工作,我正在尝试创建使用 auth:sanctum 保护的 /me 端点,作为测试只是 returns 经过身份验证的用户。
在我的 api.php 中,我有以下内容:
Route::post('/auth/register', [UserController::class, "register"]);
Route::post('/auth/login', [UserController::class, "login"]);
Route::middleware('auth:sanctum')->get('/me', function(){
return auth()->user();
});
在我的 UserController class 我有以下内容:
class UserController extends BaseController
{
use AuthorizesRequests, DispatchesJobs, ValidatesRequests;
public function register(Request $request)
{
$user = User::create([
'name' => $request['name'],
'email' => $request['email'],
'password' => bcrypt($request['password'])
]);
return response([
'success' => $user->createToken('API Token')->plainTextToken
]);
}
public function login(Request $request)
{
$attr = $request->validate([
'email' => 'required|string|email|',
'password' => 'required|string|min:6'
]);
if (!Auth::attempt($attr))
{
return response('Credentials not found', 401);
}
return response([
'token' => auth()->user()->createToken('API Token')->plainTextToken
]);
}
public function logout()
{
auth()->user()->tokens()->delete();
return [
'message' => 'Tokens Revoked'
];
}
}
/login 和 /register 路由工作正常,但是,当我尝试使用使用 auth:sanctum 中间件的 /logout 或 /me 路由时,出现以下错误:
Symfony\Component\Routing\Exception\RouteNotFoundException
Route [login] not defined.
我 Google 所做的一切似乎都表明我已经正确实施了它,所以我不确定我遗漏了什么。
在@LessMore 的帮助下,我设法解决了问题。
我认为 auth.php 的大部分问题都是错误的。在 config/auth.php 下,在 api 部分下将 driver 从 token 更改为 session,因此它应该如下所示:
'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
],
'api' => [
'driver' => 'session',
'provider' => 'users',
'hash' => false,
],
],
另一件事是我忘记添加授权 header 和登录时返回的不记名令牌并接受 application/json header.
我目前正在学习 Laravel 并使用 Sanctum 执行身份验证。
我有一条路由在 /register 和 /login 工作,我正在尝试创建使用 auth:sanctum 保护的 /me 端点,作为测试只是 returns 经过身份验证的用户。
在我的 api.php 中,我有以下内容:
Route::post('/auth/register', [UserController::class, "register"]);
Route::post('/auth/login', [UserController::class, "login"]);
Route::middleware('auth:sanctum')->get('/me', function(){
return auth()->user();
});
在我的 UserController class 我有以下内容:
class UserController extends BaseController
{
use AuthorizesRequests, DispatchesJobs, ValidatesRequests;
public function register(Request $request)
{
$user = User::create([
'name' => $request['name'],
'email' => $request['email'],
'password' => bcrypt($request['password'])
]);
return response([
'success' => $user->createToken('API Token')->plainTextToken
]);
}
public function login(Request $request)
{
$attr = $request->validate([
'email' => 'required|string|email|',
'password' => 'required|string|min:6'
]);
if (!Auth::attempt($attr))
{
return response('Credentials not found', 401);
}
return response([
'token' => auth()->user()->createToken('API Token')->plainTextToken
]);
}
public function logout()
{
auth()->user()->tokens()->delete();
return [
'message' => 'Tokens Revoked'
];
}
}
/login 和 /register 路由工作正常,但是,当我尝试使用使用 auth:sanctum 中间件的 /logout 或 /me 路由时,出现以下错误:
Symfony\Component\Routing\Exception\RouteNotFoundException
Route [login] not defined.
我 Google 所做的一切似乎都表明我已经正确实施了它,所以我不确定我遗漏了什么。
在@LessMore 的帮助下,我设法解决了问题。
我认为 auth.php 的大部分问题都是错误的。在 config/auth.php 下,在 api 部分下将 driver 从 token 更改为 session,因此它应该如下所示:
'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
],
'api' => [
'driver' => 'session',
'provider' => 'users',
'hash' => false,
],
],
另一件事是我忘记添加授权 header 和登录时返回的不记名令牌并接受 application/json header.