В api.php
файле маршрутов, указанном ниже, есть публичные маршруты и частные маршруты:
Route::group(['namespace' => 'API'], function() {
// Public routes (auth not required)
Route::group([], function() {
Route::get('/testauth1', 'TestController@testauth1');
// more public routes...
});
// Private routes (auth required)
Route::group(['middleware' => 'auth:api'], function() {
Route::get('/testauth2', 'TestController@testauth2');
// more private routes...
});
});
В TestContoller
это 2 метода, вызываемых выше:
class TestController extends Controller {
public function testauth1(\Request $request) {
// return auth()->user(); // does not return user
return $request->user(); // does not return user
}
public function testauth2() {
return auth()->user(); // returns user
}
}
Поскольку у группы частных маршрутов есть промежуточное ПО auth:api
, мы обеспечим аутентификацию пользователя, проверив токен, указанный в заголовке Authorization Bearer
.Только при наличии действующего токена приватные маршруты будут предоставлены аутентифицированному пользователю.Вот почему TestController@testauth2
корректно возвращает пользователя авторизации.
Теперь любой может получить доступ к общедоступным маршрутам с токеном или без него.Если в заголовке Authorization Bearer
не указан токен, у нас не будет аутентифицированного пользователя, что имеет смысл.Вот почему TestController@testauth1
не возвращает аутентифицированного пользователя.Однако, когда вошедший в систему пользователь получает доступ к /testauth1
общедоступному маршруту, он предоставляет свой токен в заголовке Authorization Bearer
и поэтому должен быть возвращен в TestController@testauth1
, если не с auth()->user()
, по крайней мере с $request->user()
, но мы можем 'Кажется, что доступ к пользователю с помощью предоставленного им токена в этом методе невозможен.
Есть идеи, как получить доступ к действительному пользователю токена во всех общедоступных методах маршрутизации?