2017-10-13 64 views
0

我有一个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": "->" 
    } 
    ] 
} 
+0

虽然你没有显示错误,但我猜这是一个CSRF错误。 POST路由默认在Laravel中由CSRF保护,所以您需要传递有效的CSRF令牌,或者从CSRF保护中免除更新密码路由(不推荐)。 – patricus

+0

试试这个'Route :: post('/ user/updatepassword','UserController @ changepassword') - > middleware('auth:api');' – lewis4u

+0

@patricus我添加了我从帖子请求中得到的回复。我没有理解任何东西,但你可能会。在laravel文档的api auth部分中,我没有读到有关csrf的任何信息。我认为令牌是它的替代品。我甚至不知道如何通过第三方应用程序传递它。 –

回答

0

我不知道为什么你的异常输出是如此可怕,但你正在运行到一个CSRF令牌匹配异常。

Laravel预计在web中间件中的所有POST路由上默认为CSRF令牌。 routes/web.php文件中定义的所有路由都放置在web中间件组中。

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

+0

我以为放置“ - >中间件('auth:api');”之后的路线会做,但它似乎没有,我不知道为什么。无论如何,我把路线放在api.php文件中,并将发布的请求改为“APPConnection.ApiRoot +”api/user/updatepassword“”,这个工作,谢谢。 –

相关问题