laravel passport:为什么相同的代码适用于 Http Get 请求但不适用于 POST?

laravel passport: why the same code works with Http Get request but doesn't work with POST?

我有一个 Laravel 应用程序和一个通过 Passport 连接到它的 C# 应用程序。

我做了一些简单的函数来让用户像这样更新他的密码:

Laravel路线

Route::post('user/updatepassword','UserController@changepassword')->middleware('auth:api');

Laravel 控制器

public function changepassword(Request $request)
{
    $this->validate($request, [ 'password' => 'required|string|max:255' ]);

    $newuser = User::find(Auth::user()->id);
    $newuser->password = bcrypt($request->password);
    $newuser->save();
}

C# 函数

public string UpdatePassword(string password)
{
    var client = new RestClient(APPConnection.ApiRoot + "user/updatepassword");
    //// client.Authenticator = new HttpBasicAuthenticator(username, password);

    var request = new RestRequest("", Method.POST);
    request.AddParameter("password", password); // adds to POST or URL querystring based on Method
    request.AddHeader("Authorization", "Bearer " + Current_User.access_token);

    // execute the request
    IRestResponse response = client.Execute(request);
    var content = response.Content; // raw content as string

    return content;
}

这段代码不起作用,它抛出了很多无意义的异常,或者,至少,我无法弄清楚。 但是,当我更改所有内容以在 C# 代码和 Laravel 端使用 HTTP GET 请求时,它工作正常。

我不确定哪里出了问题。可能是我传递令牌的方式对于 GET 和 POST 请求应该不同。

这是我收到的回复的副本:

{
  "message": "",
  "exception": "Symfony\Component\HttpKernel\Exception\HttpException",
  "file": "C:\xampp\htdocs\myefapplicationendor\laravel\framework\src\Illuminate\Foundation\Exceptions\Handler.php",
  "line": 203,
  "trace": [
    {
      "file": "C:\xampp\htdocs\myefapplicationendor\laravel\framework\src\Illuminate\Foundation\Exceptions\Handler.php",
      "line": 175,
      "function": "prepareException",
      "class": "Illuminate\Foundation\Exceptions\Handler",
      "type": "->"
    },
    {
      "file": "C:\xampp\htdocs\myefapplication\app\Exceptions\Handler.php",
      "line": 51,
      "function": "render",
      "class": "Illuminate\Foundation\Exceptions\Handler",
      "type": "->"
    },
    {
      "file": "C:\xampp\htdocs\myefapplicationendor\laravel\framework\src\Illuminate\Routing\Pipeline.php",
      "line": 83,
      "function": "render",
      "class": "App\Exceptions\Handler",
      "type": "->"
    },
    {
      "file": "C:\xampp\htdocs\myefapplicationendor\laravel\framework\src\Illuminate\Routing\Pipeline.php",
      "line": 55,
      "function": "handleException",
      "class": "Illuminate\Routing\Pipeline",
      "type": "->"
    },
    {
      "file": "C:\xampp\htdocs\myefapplicationendor\laravel\framework\src\Illuminate\View\Middleware\ShareErrorsFromSession.php",
      "line": 49,
      "function": "Illuminate\Routing\{closure}",
      "class": "Illuminate\Routing\Pipeline",
      "type": "->"
    },
    {
      "file": "C:\xampp\htdocs\myefapplicationendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php",
      "line": 149,
      "function": "handle",
      "class": "Illuminate\View\Middleware\ShareErrorsFromSession",
      "type": "->"
    },
    {
      "file": "C:\xampp\htdocs\myefapplicationendor\laravel\framework\src\Illuminate\Routing\Pipeline.php",
      "line": 53,
      "function": "Illuminate\Pipeline\{closure}",
      "class": "Illuminate\Pipeline\Pipeline",
      "type": "->"
    },
    {
      "file": "C:\xampp\htdocs\myefapplicationendor\laravel\framework\src\Illuminate\Session\Middleware\StartSession.php",
      "line": 63,
      "function": "Illuminate\Routing\{closure}",
      "class": "Illuminate\Routing\Pipeline",
      "type": "->"
    },
    {
      "file": "C:\xampp\htdocs\myefapplicationendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php",
      "line": 149,
      "function": "handle",
      "class": "Illuminate\Session\Middleware\StartSession",
      "type": "->"
    },
    {
      "file": "C:\xampp\htdocs\myefapplicationendor\laravel\framework\src\Illuminate\Routing\Pipeline.php",
      "line": 53,
      "function": "Illuminate\Pipeline\{closure}",
      "class": "Illuminate\Pipeline\Pipeline",
      "type": "->"
    },
    {
      "file": "C:\xampp\htdocs\myefapplicationendor\laravel\framework\src\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse.php",
      "line": 37,
      "function": "Illuminate\Routing\{closure}",
      "class": "Illuminate\Routing\Pipeline",
      "type": "->"
    },
    {
      "file": "C:\xampp\htdocs\myefapplicationendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php",
      "line": 149,
      "function": "handle",
      "class": "Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse",
      "type": "->"
    },
    {
      "file": "C:\xampp\htdocs\myefapplicationendor\laravel\framework\src\Illuminate\Routing\Pipeline.php",
      "line": 53,
      "function": "Illuminate\Pipeline\{closure}",
      "class": "Illuminate\Pipeline\Pipeline",
      "type": "->"
    },
    {
      "file": "C:\xampp\htdocs\myefapplicationendor\laravel\framework\src\Illuminate\Cookie\Middleware\EncryptCookies.php",
      "line": 59,
      "function": "Illuminate\Routing\{closure}",
      "class": "Illuminate\Routing\Pipeline",
      "type": "->"
    },
    {
      "file": "C:\xampp\htdocs\myefapplicationendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php",
      "line": 149,
      "function": "handle",
      "class": "Illuminate\Cookie\Middleware\EncryptCookies",
      "type": "->"
    },
    {
      "file": "C:\xampp\htdocs\myefapplicationendor\laravel\framework\src\Illuminate\Routing\Pipeline.php",
      "line": 53,
      "function": "Illuminate\Pipeline\{closure}",
      "class": "Illuminate\Pipeline\Pipeline",
      "type": "->"
    },
    {
      "file": "C:\xampp\htdocs\myefapplicationendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php",
      "line": 102,
      "function": "Illuminate\Routing\{closure}",
      "class": "Illuminate\Routing\Pipeline",
      "type": "->"
    },
    {
      "file": "C:\xampp\htdocs\myefapplicationendor\laravel\framework\src\Illuminate\Routing\Router.php",
      "line": 647,
      "function": "then",
      "class": "Illuminate\Pipeline\Pipeline",
      "type": "->"
    },
    {
      "file": "C:\xampp\htdocs\myefapplicationendor\laravel\framework\src\Illuminate\Routing\Router.php",
      "line": 622,
      "function": "runRouteWithinStack",
      "class": "Illuminate\Routing\Router",
      "type": "->"
    },
    {
      "file": "C:\xampp\htdocs\myefapplicationendor\laravel\framework\src\Illuminate\Routing\Router.php",
      "line": 588,
      "function": "runRoute",
      "class": "Illuminate\Routing\Router",
      "type": "->"
    },
    {
      "file": "C:\xampp\htdocs\myefapplicationendor\laravel\framework\src\Illuminate\Routing\Router.php",
      "line": 577,
      "function": "dispatchToRoute",
      "class": "Illuminate\Routing\Router",
      "type": "->"
    },
    {
      "file": "C:\xampp\htdocs\myefapplicationendor\laravel\framework\src\Illuminate\Foundation\Http\Kernel.php",
      "line": 176,
      "function": "dispatch",
      "class": "Illuminate\Routing\Router",
      "type": "->"
    },
    {
      "file": "C:\xampp\htdocs\myefapplicationendor\laravel\framework\src\Illuminate\Routing\Pipeline.php",
      "line": 30,
      "function": "Illuminate\Foundation\Http\{closure}",
      "class": "Illuminate\Foundation\Http\Kernel",
      "type": "->"
    },
    {
      "file": "C:\xampp\htdocs\myefapplicationendor\fideloper\proxy\src\TrustProxies.php",
      "line": 56,
      "function": "Illuminate\Routing\{closure}",
      "class": "Illuminate\Routing\Pipeline",
      "type": "->"
    },
    {
      "file": "C:\xampp\htdocs\myefapplicationendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php",
      "line": 149,
      "function": "handle",
      "class": "Fideloper\Proxy\TrustProxies",
      "type": "->"
    },
    {
      "file": "C:\xampp\htdocs\myefapplicationendor\laravel\framework\src\Illuminate\Routing\Pipeline.php",
      "line": 53,
      "function": "Illuminate\Pipeline\{closure}",
      "class": "Illuminate\Pipeline\Pipeline",
      "type": "->"
    },
    {
      "file": "C:\xampp\htdocs\myefapplicationendor\laravel\framework\src\Illuminate\Foundation\Http\Middleware\TransformsRequest.php",
      "line": 30,
      "function": "Illuminate\Routing\{closure}",
      "class": "Illuminate\Routing\Pipeline",
      "type": "->"
    },
    {
      "file": "C:\xampp\htdocs\myefapplicationendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php",
      "line": 149,
      "function": "handle",
      "class": "Illuminate\Foundation\Http\Middleware\TransformsRequest",
      "type": "->"
    },
    {
      "file": "C:\xampp\htdocs\myefapplicationendor\laravel\framework\src\Illuminate\Routing\Pipeline.php",
      "line": 53,
      "function": "Illuminate\Pipeline\{closure}",
      "class": "Illuminate\Pipeline\Pipeline",
      "type": "->"
    },
    {
      "file": "C:\xampp\htdocs\myefapplicationendor\laravel\framework\src\Illuminate\Foundation\Http\Middleware\TransformsRequest.php",
      "line": 30,
      "function": "Illuminate\Routing\{closure}",
      "class": "Illuminate\Routing\Pipeline",
      "type": "->"
    },
    {
      "file": "C:\xampp\htdocs\myefapplicationendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php",
      "line": 149,
      "function": "handle",
      "class": "Illuminate\Foundation\Http\Middleware\TransformsRequest",
      "type": "->"
    },
    {
      "file": "C:\xampp\htdocs\myefapplicationendor\laravel\framework\src\Illuminate\Routing\Pipeline.php",
      "line": 53,
      "function": "Illuminate\Pipeline\{closure}",
      "class": "Illuminate\Pipeline\Pipeline",
      "type": "->"
    },
    {
      "file": "C:\xampp\htdocs\myefapplicationendor\laravel\framework\src\Illuminate\Foundation\Http\Middleware\ValidatePostSize.php",
      "line": 27,
      "function": "Illuminate\Routing\{closure}",
      "class": "Illuminate\Routing\Pipeline",
      "type": "->"
    },
    {
      "file": "C:\xampp\htdocs\myefapplicationendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php",
      "line": 149,
      "function": "handle",
      "class": "Illuminate\Foundation\Http\Middleware\ValidatePostSize",
      "type": "->"
    },
    {
      "file": "C:\xampp\htdocs\myefapplicationendor\laravel\framework\src\Illuminate\Routing\Pipeline.php",
      "line": 53,
      "function": "Illuminate\Pipeline\{closure}",
      "class": "Illuminate\Pipeline\Pipeline",
      "type": "->"
    },
    {
      "file": "C:\xampp\htdocs\myefapplicationendor\laravel\framework\src\Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode.php",
      "line": 46,
      "function": "Illuminate\Routing\{closure}",
      "class": "Illuminate\Routing\Pipeline",
      "type": "->"
    },
    {
      "file": "C:\xampp\htdocs\myefapplicationendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php",
      "line": 149,
      "function": "handle",
      "class": "Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode",
      "type": "->"
    },
    {
      "file": "C:\xampp\htdocs\myefapplicationendor\laravel\framework\src\Illuminate\Routing\Pipeline.php",
      "line": 53,
      "function": "Illuminate\Pipeline\{closure}",
      "class": "Illuminate\Pipeline\Pipeline",
      "type": "->"
    },
    {
      "file": "C:\xampp\htdocs\myefapplicationendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php",
      "line": 102,
      "function": "Illuminate\Routing\{closure}",
      "class": "Illuminate\Routing\Pipeline",
      "type": "->"
    },
    {
      "file": "C:\xampp\htdocs\myefapplicationendor\laravel\framework\src\Illuminate\Foundation\Http\Kernel.php",
      "line": 151,
      "function": "then",
      "class": "Illuminate\Pipeline\Pipeline",
      "type": "->"
    },
    {
      "file": "C:\xampp\htdocs\myefapplicationendor\laravel\framework\src\Illuminate\Foundation\Http\Kernel.php",
      "line": 116,
      "function": "sendRequestThroughRouter",
      "class": "Illuminate\Foundation\Http\Kernel",
      "type": "->"
    },
    {
      "file": "C:\xampp\htdocs\myefapplication\public\index.php",
      "line": 55,
      "function": "handle",
      "class": "Illuminate\Foundation\Http\Kernel",
      "type": "->"
    }
  ]
}

我不知道为什么你的异常输出如此可怕,但你 运行 陷入了 CSRF 令牌不匹配异常。

Laravel 在 web 中间件的所有 POST 路由上默认需要一个 CSRF 令牌。 routes/web.php 文件中定义的所有路由都放在 web 中间件组中。

如果这是一个 API 端点(考虑到您使用的是护照,我假设它是),您的路由应该在 routes/api.php 文件中定义。通过这样做,它被放置在 api 中间件组而不是 web 中间件组中。这将消除 CSRF 令牌限制等。