Laravel HTTPS URL随机字符?

时间:2016-11-18 15:21:45

标签: laravel ssl nginx

我刚刚使用NGINX在我的子域上设置了自定义API,并使用了SSL证书。一切正常(获取请求等)但是,每当我尝试进行身份验证时,我都会收到401'无效凭据'。

当我死去并倾倒$request->all();时我发现我突然有一个额外的GET参数称为'q'?对于https://api.domain.com/api/v1/login?email=test@test.com&password=test我的凭据突然变为:

q => email=test@test.com
password => test

我绝对感到困惑,有没有人知道最新情况?这种情况发生在我激活SSL证书时。

我假设q用于查询.. 另外,这是我的路线文件:

Route::get('/', function() {
  return 'Welcome to API';
});

/* API Version 1 */
Route::group(['prefix' => 'v1', 'middleware' => 'cors'], function() {

  Route::post('/login', 'AuthController@authenticate');

  Route::group(['middleware' => ['jwt.auth']], function() {
    Route::resource('users', 'UsersController', ['only' => ['index', 'show', 'store']]);
    Route::resource('rooms', 'RoomsController', ['only' => ['index', 'show']]);
    Route::resource('reservations', 'ReservationsController');
    Route::resource('customers', 'CustomersController');

    Route::get('rooms/{id}/reservations', 'ReservationsController@getReservationsByRoom');
    Route::get('users/{id}/reservations', 'ReservationsController@getReservationsByUser');
    Route::get('users/{id}/customers', 'CustomersController@getCustomersByUser');
    Route::get('reservations/{id}/customer', 'CustomersController@getCustomerByReservation');

    Route::get('me', 'UsersController@getAuthenticatedUser');
    Route::get('me/reservations', 'ReservationsController@getReservationsByAuthenticatedUser');
    Route::get('me/customers', 'CustomersController@getCustomersByAuthenticatedUser');
  });
});

TIA

3 个答案:

答案 0 :(得分:2)

什么版本的Laravel?

我还没有看到这种行为(重写参数);如果Laravel事实上是罪魁祸首(并且有点失望),我会感到非常惊讶。

如果您正在使用Laravel 5.3(可能是5.2,不确定),您可以使用$ request-> getContent()来查看Laravel所看到的整个请求对象。如下面的评论所示,我同意它不是Laravel,更可能是您的配置问题(特别是考虑到它启用HTTPS时)。

Laravel不处理您的网络服务器的安全层(https),因此来自Laravel的POV http === https,并且它不应该关心任何一种方式。

答案 1 :(得分:0)

我在几个案例中看到Laravel强制使用Mod Rewrite进行HTTPS,所以你可能想看看它,也许它会有所帮助。

答案 2 :(得分:0)

我找到了解决方案。这确实是我的NGINX配置,Laravel不会做这样的事情。最好尽可能减少重写次数。这是我/etc/nginx/sites-available/default的默认设置:

location / {
    try_files $uri $uri/ /index.php?q=$query_string;
}

在查询字符串之前删除q当然解决了我的问题。

感谢您的所有见解