laravel8.x使用sanctum进行API验证出现路由错误
路由文件如下图:
<?php
use Illuminate\Support\Facades\Route;
use \App\Http\Controllers\V1\AuthController;
Route::group(['prefix' => 'v1'], function ($api) {
$api->post('auth/login', [AuthController::class, 'login'])->name('login');
$api->post('auth/logout', [AuthController::class, 'logout'])->middleware('auth:sanctum');
$api->post('user', [AuthController::class, 'index'])->middleware('auth:sanctum');
});
控制器文件如下:
<?php
namespace App\Http\Controllers\V1;
use App\Models\User;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Hash;
class AuthController extends Controller
{
public function login(Request $request)
{
$request->validate([
'email' => 'required|email',
'password' => 'required',
]);
$user = User::query()->where('email', $request->get('email'))->first();
if (!$user || !Hash::check($request->get('password'), $user->password)) {
return $this->error('These credentials do not match our records.', 400);
}
$token = $user->createToken('worker-mina-pro')->plainTextToken;
return $this->ok([
'user' => $user,
'token' => $token,
]);
}
public function logout()
{
$result = auth()->user()->currentAccessToken()->delete();
if ($result) {
return $this->ok('success');
}
}
public function index()
{
$user = auth()->user();
return $this->ok($user);
}
}
现在请求登录是正常的,每次会生成token, 然后拿着正确的token去请求另外两个接口是正确的,通的。 但是当我把token改一下,改成肯定不对的之后,再请求另外两个接口的时候就会出现如下错误:
Symfony\Component\HttpKernel\Exception\MethodNotAllowedHttpException: The GET method is not supported for this route. Supported methods: POST. in file /var/www/html/worker-mina-server/vendor/laravel/framework/src/Illuminate/Routing/AbstractRouteCollection.php on line 117。
刚开始以为路由写法问题改了几种方式,都是一样的结果。
请帮忙查看一下是哪里的问题? 谢谢了。
目前问题已解决,首先请求header 里面加上 Accept application/json,然后 php artisan route:clear清一下路由缓存,重新请求就好了。
错误的token请求时候该有的提示是这个。