【发布时间】:2018-11-15 12:07:49
【问题描述】:
在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 正确返回 auth 用户的原因。
现在,任何人都可以访问公共路线,无论是否有令牌。如果Authorization Bearer 标头中没有提供令牌,那么我们将没有经过身份验证的用户,这是有道理的。这就是TestController@testauth1 不返回身份验证用户的原因。但是,当登录用户访问 /testauth1 公共路由时,他们会在 Authorization Bearer 标头中提供他们的令牌,因此如果不是 auth()->user() 至少应该在 TestController@testauth1 中返回 $request->user() 但我们可以t 似乎在该方法中使用他们提供的令牌访问用户。
知道如何在所有公共路由方法中访问有效令牌用户吗?
【问题讨论】:
标签: laravel laravel-5 laravel-5.5 laravel-5.6 laravel-passport