我目前正在Laravel中建立一个新项目。
登录后,我想存储登录用户的令牌。因此,我可以使用这种格式在其他控制器中发出其他API请求,
代码:
$response = $client->request('POST', '/api/user', [
'headers' => [
'Authorization' => 'Bearer '.$token,
'Accept' => 'application/json',
],]);
我不太确定如何存储$ token,以便可以在所有控制器中访问它。
答案 0 :(得分:0)
如果我很好理解,则必须使用passport来生成存储在数据库中的身份验证令牌,并使用middleware来保护路由,与此同时,每个请求都需要在其标头中包含令牌在“ bearer”参数中。
以下是api文件中的中间件实现示例,它可保护您的控制器的访问:
Route::group(['middleware' => 'auth:api'], function(){
//define your routes here
});
答案 1 :(得分:0)
通常,使用基于令牌的身份验证的API要求令牌与每个请求一起发送,因为希望这些API是无状态的。这意味着无论您的控制器正在处理用户请求,还是将有令牌在后台执行其他请求。在您的控制器中,您应该能够像这样检索令牌:
$(document).ready(function() { window.print(); }
显然,将令牌解析提取到它自己的函数中是有意义的,该函数位于所有其他控制器都继承自的基本控制器中。在您的具体示例中,您也可以只使用class MyController
{
public function index(Request $request)
{
$authorization = $request->header('Authorization');
$token = null;
if (substr($authorization, 0, 7) === "Bearer ") {
$token = substr($authorization, 7);
}
// in theory, this is obsolete as your controller should only
// be called if there is a valid token present on the request
if ($token === null) {
abort(403); // or whatever
}
$client = ...; // initialize the client
$response = $client->request('POST', '/api/user', [
'headers' => [
'Authorization' => 'Bearer '.$token,
'Accept' => 'application/json',
],
]);
// return some response to the user
}
}
,因为您只想转发标题。
没有任何意义的旧答案
将令牌存储在用户的会话数据中:
['headers' => ['Authorization' => $request->header('Authorization')]]
该数组指示您在会话中设置数据。检索令牌更加容易:
session(['token' => $token]);