Laravel 5.6 - 如何在 api 控制器中获取 auth()->user() 或 $response->user()?
Laravel 5.6 - How to get auth()->user() or $response->user() in api controller?
在下面的api.php
路由文件中,有public条路由和私有路由:
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
header 中提供的令牌来确保用户已通过身份验证。只有存在有效令牌时,私有路由才会呈现给经过身份验证的用户。这就是为什么 TestController@testauth2
return 正确设置授权用户。
现在,任何人都可以使用或不使用令牌访问 public 路由。如果 Authorization Bearer
header 中没有提供令牌,那么我们将没有经过身份验证的用户,这是有道理的。这就是 TestController@testauth1
不是 return 授权用户的原因。但是,当登录用户访问 /testauth1
public 路由时,他们会在 Authorization Bearer
header 中提供令牌,因此应该在 return 中编辑 [=20] =] 如果不使用 auth()->user()
至少使用 $request->user()
但我们似乎无法使用该方法中提供的令牌访问用户。
知道我们如何在所有 public 路由方法中访问有效令牌用户吗?
您正在从根命名空间引用 Request
:\Request
。相反,您应该参考 Illuminate\Http\Request
class.
您应该从参数中删除 \
并将以下行添加到您的导入中。
use Illuminate\Http\Request;
或者,您也可以在您的方法中直接引用请求 class:
class TestController extends Controller {
public function testauth1(Illuminate\Http\Request $request) {
return $request->user();
}
public function testauth2() {
return auth()->user(); // returns user
}
}
auth()
helper method or Auth
Facade 全局可用。它不取决于您尝试访问的请求。我相信 request()
和 Request::
助手也是如此。在您提供的情况下,您引用了错误的 Request 实例,因此给出了意外结果。
将 api
守卫作为参数传递,以在没有保护请求的中间件的情况下获取授权用户。
$request->user('api');
// Or
auth('api')->user();
在下面的api.php
路由文件中,有public条路由和私有路由:
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
header 中提供的令牌来确保用户已通过身份验证。只有存在有效令牌时,私有路由才会呈现给经过身份验证的用户。这就是为什么 TestController@testauth2
return 正确设置授权用户。
现在,任何人都可以使用或不使用令牌访问 public 路由。如果 Authorization Bearer
header 中没有提供令牌,那么我们将没有经过身份验证的用户,这是有道理的。这就是 TestController@testauth1
不是 return 授权用户的原因。但是,当登录用户访问 /testauth1
public 路由时,他们会在 Authorization Bearer
header 中提供令牌,因此应该在 return 中编辑 [=20] =] 如果不使用 auth()->user()
至少使用 $request->user()
但我们似乎无法使用该方法中提供的令牌访问用户。
知道我们如何在所有 public 路由方法中访问有效令牌用户吗?
您正在从根命名空间引用 Request
:\Request
。相反,您应该参考 Illuminate\Http\Request
class.
您应该从参数中删除 \
并将以下行添加到您的导入中。
use Illuminate\Http\Request;
或者,您也可以在您的方法中直接引用请求 class:
class TestController extends Controller {
public function testauth1(Illuminate\Http\Request $request) {
return $request->user();
}
public function testauth2() {
return auth()->user(); // returns user
}
}
auth()
helper method or Auth
Facade 全局可用。它不取决于您尝试访问的请求。我相信 request()
和 Request::
助手也是如此。在您提供的情况下,您引用了错误的 Request 实例,因此给出了意外结果。
将 api
守卫作为参数传递,以在没有保护请求的中间件的情况下获取授权用户。
$request->user('api');
// Or
auth('api')->user();