php - RouteNotFoundException [登录] Laravel Sanctum
问题描述
我目前正在学习 Laravel 并使用 Sanctum 进行身份验证。
我有一个工作 /register 和 /login 的路由,我正在尝试创建使用 auth:sanctum 保护的 /me 端点,它作为测试只返回经过身份验证的用户。
在我的 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 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.
我在谷歌上搜索到的所有东西似乎都表明我已经正确地实现了它,所以我不确定我错过了什么。
解决方案
在@LessMore 的帮助下,我设法找出了问题所在。
我认为大部分问题是 auth.php 是错误的。在 config/auth.php 下的 api 部分下,将驱动程序从 token 更改为 session,因此应该如下所示:
'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
],
'api' => [
'driver' => 'session',
'provider' => 'users',
'hash' => false,
],
],
另一件事是我忘记添加 Authorization 标头与登录时返回的不记名令牌并放置 Accept application/json 标头。
推荐阅读
- reactjs - 如何为 axios 请求设置操作名称(在反应应用程序中)?
- flutter - Flutter如何制作像UI一样的表格
- reactjs - 用未确定的斜杠反应路由动态网址
- javascript - 制作电影票应用程序时将 Nodelist.length 设为零
- jquery - jQuery 适用于 Chrome,但不适用于 Safari
- php - PHP 面向对象编程 - 何时使用公共、私有或受保护
- vuejs2 - 如何正确更新 VueJs .env 文件
- c - 使用 strtok 进行 C 程序段错误
- python - 我可以在 selenium 中暂停滚动功能,抓取当前数据,然后稍后在脚本中继续滚动吗?
- python - 从列表中运行函数