【问题标题】:laravel passport: why the same code works with Http Get request but doesn't work with POST?laravel 护照:为什么相同的代码适用于 Http Get 请求但不适用于 POST?
【发布时间】:2026-01-01 12:25:02
【问题描述】:

我有一个 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 中,POST 路由默认受 CSRF 保护,因此您要么需要传入有效的 CSRF 令牌,要么使更新密码路由免受 CSRF 保护(不推荐)。
  • 试试这个Route::post('/user/updatepassword','UserController@changepassword')->middleware('auth:api');
  • @patricus 我添加了从发布请求中获得的响应。我没有从中理解任何东西,但你可能会。而且我没有在 laravel 文档的 api auth 部分中阅读有关 csrf 的任何内容。我认为令牌是它的替代品。而且我什至不确定如何通过第三方应用程序传递它。

标签: c# laravel oauth rest-client laravel-passport


【解决方案1】:

我不知道为什么您的异常输出如此可怕,但您遇到了 CSRF 令牌不匹配异常。

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

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

【讨论】:

  • 我想放置“->middleware('auth:api');”在路线之后会做,但似乎它没有,我不知道为什么。无论如何,我将路由放在 api.php 文件中,并将发布请求更改为“APPConnection.ApiRoot + “api/user/updatepassword””,这样就可以了,谢谢。
最近更新 更多