Laravel Passport - 将访问令牌传递给请求
Laravel Passport - Passing access token to requests
我是第一次使用 Laravel Passport。我正在构建一个将由移动应用程序使用的 API。
对于身份验证,这就是我正在做的:
public function login(Request $request)
{
$loginData = Validator::make($request->all(), [
'email' => 'required|email',
'password' => 'required',
]);
if( $loginData->fails() )
{
return response()->json(['error' => $loginData->errors()], 401);
}
if( Auth::attempt(['email' => request('email'), 'password' => request('password')]) )
{
$data = [
'grant_type' => 'password',
'client_id' => $this->client->id,
'client_secret' => $this->client->secret,
'username' => $request->email,
'password' => $request->password,
'scope' => '',
];
$request = Request::create('/oauth/token', 'POST', $data);
return app()->handle($request);
}
else
{
return response()->json(['error' => 'Invalid credentials'], 401);
}
}
成功登录returns访问令牌如下:
{
"token_type": "Bearer",
"expires_in": 31622400,
"access_token": "access_token",
"refresh_token": "refresh_token"
}
现在的目标是通过将此访问令牌传递给需要身份验证的所有路由的 header 来使用它。
例如在我的 routes/api.php
文件中,我有这条路线:
Route::post('/login', 'API\AuthController@login');
Route::apiResource('/tasks', 'API\TaskController')->middleware('auth:api');
在我的TaskController
中,其中的所有方法都需要传递一个包含访问令牌的header,以便对请求进行身份验证。这就是我的问题所在。到目前为止,我似乎找不到解释如何执行此操作的资源。所以在每个请求中我都需要将这样的东西传递给请求的 header:
Accept: application/json
Authorization: Bearer access_token
这是我的TaskController
index
方法。我如何在此处传递访问令牌?
public function index()
{
//how do i capture the access token in here so that i can pass it to the request header?
return TaskResource::collection(auth()->user()->tasks()->latest()->paginate(4));
}
是否有默认的 Passport 方法可用于将访问令牌传递给所需的请求,或者如何完成?
use Illuminate\Http\Request;
public function index(Request $request)
{
$bearerToken = $request->header('Authorization'); // will return "Bearer access_token" string
}
然后您需要从 "Bearer access_token"
字符串中获取 access_token
。
如果你需要 access_token
来检索用户,你可以使用 $user = $request->user()
来获取用户。
使用 $request->bearerToken(); 方法你可以获得请求令牌。
use Illuminate\Http\Request;
public function index(Request $request)
{
echo $request->bearerToken();
}
我是第一次使用 Laravel Passport。我正在构建一个将由移动应用程序使用的 API。
对于身份验证,这就是我正在做的:
public function login(Request $request)
{
$loginData = Validator::make($request->all(), [
'email' => 'required|email',
'password' => 'required',
]);
if( $loginData->fails() )
{
return response()->json(['error' => $loginData->errors()], 401);
}
if( Auth::attempt(['email' => request('email'), 'password' => request('password')]) )
{
$data = [
'grant_type' => 'password',
'client_id' => $this->client->id,
'client_secret' => $this->client->secret,
'username' => $request->email,
'password' => $request->password,
'scope' => '',
];
$request = Request::create('/oauth/token', 'POST', $data);
return app()->handle($request);
}
else
{
return response()->json(['error' => 'Invalid credentials'], 401);
}
}
成功登录returns访问令牌如下:
{
"token_type": "Bearer",
"expires_in": 31622400,
"access_token": "access_token",
"refresh_token": "refresh_token"
}
现在的目标是通过将此访问令牌传递给需要身份验证的所有路由的 header 来使用它。
例如在我的 routes/api.php
文件中,我有这条路线:
Route::post('/login', 'API\AuthController@login');
Route::apiResource('/tasks', 'API\TaskController')->middleware('auth:api');
在我的TaskController
中,其中的所有方法都需要传递一个包含访问令牌的header,以便对请求进行身份验证。这就是我的问题所在。到目前为止,我似乎找不到解释如何执行此操作的资源。所以在每个请求中我都需要将这样的东西传递给请求的 header:
Accept: application/json
Authorization: Bearer access_token
这是我的TaskController
index
方法。我如何在此处传递访问令牌?
public function index()
{
//how do i capture the access token in here so that i can pass it to the request header?
return TaskResource::collection(auth()->user()->tasks()->latest()->paginate(4));
}
是否有默认的 Passport 方法可用于将访问令牌传递给所需的请求,或者如何完成?
use Illuminate\Http\Request;
public function index(Request $request)
{
$bearerToken = $request->header('Authorization'); // will return "Bearer access_token" string
}
然后您需要从 "Bearer access_token"
字符串中获取 access_token
。
如果你需要 access_token
来检索用户,你可以使用 $user = $request->user()
来获取用户。
使用 $request->bearerToken(); 方法你可以获得请求令牌。
use Illuminate\Http\Request;
public function index(Request $request)
{
echo $request->bearerToken();
}