我刚刚使用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
答案 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当然解决了我的问题。
感谢您的所有见解