laravel护照:为什么相同的代码可以与Http Get请求一起使用,但不适用于POST?
我有一个Laravel应用程序和一个通过Passport连接到它的C#应用程序。laravel护照:为什么相同的代码可以与Http Get请求一起使用,但不适用于POST?
我做了简单的功能,使用户更新自己的密码是这样的:
Laravel路由
Route::post('user/updatepassword','[email protected]')->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标记限制等。
我以为放置“ - >中间件('auth:api');”之后的路线会做,但它似乎没有,我不知道为什么。无论如何,我把路线放在api.php文件中,并将发布的请求改为“APPConnection.ApiRoot +”api/user/updatepassword“”,这个工作,谢谢。 –
虽然你没有显示错误,但我猜这是一个CSRF错误。 POST路由默认在Laravel中由CSRF保护,所以您需要传递有效的CSRF令牌,或者从CSRF保护中免除更新密码路由(不推荐)。 – patricus
试试这个'Route :: post('/ user/updatepassword','UserController @ changepassword') - > middleware('auth:api');' – lewis4u
@patricus我添加了我从帖子请求中得到的回复。我没有理解任何东西,但你可能会。在laravel文档的api auth部分中,我没有读到有关csrf的任何信息。我认为令牌是它的替代品。我甚至不知道如何通过第三方应用程序传递它。 –