Laravel API:此路由不支持 POST 方法。支持的方法:GET、HEAD

Jet*_*rst 3 php rest post laravel laravel-passport

我正在向 发送 post 请求http://localhost/projects/webdevlist/public/api/register并收到 405 错误:

Symfony\Component\HttpKernel\Exception\MethodNotAllowedHttpException
The POST method is not supported for this route. Supported methods: GET, HEAD.
Run Code Online (Sandbox Code Playgroud)

路线\api.php:

<?php

use Illuminate\Http\Request;

Route::middleware('auth:api')->get('/user', function (Request $request) {
    return $request->user();
});

Route::post('/register', 'Api\AuthController@register');
Run Code Online (Sandbox Code Playgroud)

Api\AuthController.php:

<?php

namespace App\Http\Controllers\Api;

use App\User;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;

class AuthController extends Controller
{
    public function register(Request $request)
    {
        $validatedData = $request->validate([
            'name' => 'required|max:55',
            'email' => 'required|email',
            'password' => 'required|confirmed'
        ]);

        $user = User::create($validatedData);

        $accessToken = $user->createToken('token')->accessToken;

        return response(['user' => $user, 'access_token' => $accessToken]);
    }
}
Run Code Online (Sandbox Code Playgroud)

如果我删除表单验证,那么我可以很好地执行发布请求并在邮递员中返回结果,如下所示。

<?php

namespace App\Http\Controllers\Api;

use App\User;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;

class AuthController extends Controller
{
    public function register(Request $request)
    {
        return response()->json([
            $request->name,
            $request->email,
            $request->password,
        ]);
    }
}
Run Code Online (Sandbox Code Playgroud)

但我的验证有问题。为什么验证导致我无法再接受POST请求?

这是我的 POST 请求: 在此输入图像描述

Jrb*_*Jrb 5

您的验证问题在于字段password

你的规则说它需要被要求和确认,但是根据哪个字段确认?

您需要添加一个名为password_confirmation您的视图的字段(如果尚未添加)。

 <input type="password" name="password_confirmation" />
Run Code Online (Sandbox Code Playgroud)

然后为password_confirmation字段添加新规则:

$validatedData = $request->validate([
    'name' => 'required|max:55',
    'email' => 'required|email',
    'password' => 'required|confirmed',
    'password_confirmation' => 'required'
]);
Run Code Online (Sandbox Code Playgroud)

  • 这很有趣。我想知道为什么这会禁止对此路由的 POST 请求。 (5认同)
  • 我们需要在堆栈跟踪上进行更多调试才能知道原因;) (3认同)