存储laravel API令牌的最佳方法?

时间:2019-05-30 11:28:29

标签: laravel

我目前正在Laravel中建立一个新项目。

登录后,我想存储登录用户的令牌。因此,我可以使用这种格式在其他控制器中发出其他API请求,

代码:

$response = $client->request('POST', '/api/user', [
'headers' => [
    'Authorization' => 'Bearer '.$token,
    'Accept' => 'application/json',
],]);

我不太确定如何存储$ token,以便可以在所有控制器中访问它。

2 个答案:

答案 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]);