Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Laravel 在不使用auth中间件的情况下,如何通过令牌获取用户id?_Laravel_Laravel 5.4_Laravel Passport - Fatal编程技术网

Laravel 在不使用auth中间件的情况下,如何通过令牌获取用户id?

Laravel 在不使用auth中间件的情况下,如何通过令牌获取用户id?,laravel,laravel-5.4,laravel-passport,Laravel,Laravel 5.4,Laravel Passport,在Laravel5.4中,使用oauth2/passport,我有一个公共的路由,所以我不使用中间件auth 此路由由登录和未登录的用户访问 我想获取访问此路由的用户id o(如果已登录)。如果不通过参数或类似的方式传递用户id,是否可能(仅使用令牌) 我可以通过以下方式获取用户令牌: $access_token = $request->header('Authorization'); 然后像这样返回: "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1Ni

在Laravel5.4中,使用oauth2/passport,我有一个公共的路由,所以我不使用中间件auth

此路由由登录和未登录的用户访问

我想获取访问此路由的用户id o(如果已登录)。如果不通过参数或类似的方式传递用户id,是否可能(仅使用令牌)

我可以通过以下方式获取用户令牌:

$access_token = $request->header('Authorization');
然后像这样返回:

"Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImp0aSI6IjlmZGIwZGM0MzgyZjI4MzNjZTJkMzk5M2M2NzBmYWZiNWE3ZTdiODhhZGE4NWY0OTBhYmI5MGFjMjExODAyNzIwYTBmYzczOTJjM2YyZTdjIn0.eyJhdWQiOiIyIiwianRpIjoiOWZkYjBkYzQzODJmMjgzM2NlMmQzOTkzYzY3MGZhZmI1YTdlN2I4OGFkYTg1ZjQ5MGFiYjkwYWMyMTE4MDI3MjBhMGZjNzM5MmMzZjJlN2MiLCJpYXQiOjE0ODc4NTU2MTYsIm5iZiI6MTQ4Nzg1NTYxNiwiZXhwIjoxNDg3OTQyMDE2LCJzdWIiOiIxIiwic2NvcGVzIjpbIioiXX0.sdHNQ_bDGtO3lGBwtmlZfkSdYkaUsYSabaY93894Fw4l3z_wU5d7xsfNj6LoK8lPXBTFAhoFf7SjtuQ0F_T6lst0ADwEmc_fLTH1dsTkHq6BdOLr3Ur6dLrbYOqihHG0FhJ6HaUtanbRBBeuK33aVUwuUkCwVkrLgxK6OYEwcq97aU1Cuy3jHOfOB88VAuJ42kwtScpXzi0Oo6zlCxyGAmBlEMWdcSBEkI4vRR-cJdaWsRVZ--671i1Gw5jOhXtN0HS_HMNSf9WWgiUDAyhe1mvlW4eZbTDfg2Al34YauJ_rpPSCw6vwnvpqp9Yvh9Vl0r1k8o_bm_2-NjiVINqdRALmaORbFGu2S9CJso5Jcio_jrWSzznIkf6Jopw9ar8Ca_Cf_KV6cmLOOx2XgWXV7WMCkSIPQXFXrtxE4hnfXEd8K5S5HLgch0hPgJPpgL91x1i73MP1gQyYoWNFCip9cDDlDvPO1zG28O12c4H4bsdy1jaaOOOv34yECfgA87RIFCbGtrzd_9QBXDse51L1IFJu8B6sotyk_4QcGcKSWzOPjI8L2_xhPIG54qk0lzqNWeVHo2UbNpBB6u2OJnszKC44BH5hneYoTbqMGK_1Uo2jR14XixvBlZydXXquuTmDVoBj2ygfjlnZ6UWJenQIO_bLEkF2iaWcgbOhJ6S197k"

我不知道如何通过此令牌定位用户。

要通过令牌获取用户,您需要了解令牌是什么

令牌分为三个base64编码部分:标头、有效负载和签名,由句点分隔。在您的情况下,因为您只是想找到用户,所以只需要
标题

要获取标题,可以执行以下操作:

"Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImp0aSI6IjlmZGIwZGM0MzgyZjI4MzNjZTJkMzk5M2M2NzBmYWZiNWE3ZTdiODhhZGE4NWY0OTBhYmI5MGFjMjExODAyNzIwYTBmYzczOTJjM2YyZTdjIn0.eyJhdWQiOiIyIiwianRpIjoiOWZkYjBkYzQzODJmMjgzM2NlMmQzOTkzYzY3MGZhZmI1YTdlN2I4OGFkYTg1ZjQ5MGFiYjkwYWMyMTE4MDI3MjBhMGZjNzM5MmMzZjJlN2MiLCJpYXQiOjE0ODc4NTU2MTYsIm5iZiI6MTQ4Nzg1NTYxNiwiZXhwIjoxNDg3OTQyMDE2LCJzdWIiOiIxIiwic2NvcGVzIjpbIioiXX0.sdHNQ_bDGtO3lGBwtmlZfkSdYkaUsYSabaY93894Fw4l3z_wU5d7xsfNj6LoK8lPXBTFAhoFf7SjtuQ0F_T6lst0ADwEmc_fLTH1dsTkHq6BdOLr3Ur6dLrbYOqihHG0FhJ6HaUtanbRBBeuK33aVUwuUkCwVkrLgxK6OYEwcq97aU1Cuy3jHOfOB88VAuJ42kwtScpXzi0Oo6zlCxyGAmBlEMWdcSBEkI4vRR-cJdaWsRVZ--671i1Gw5jOhXtN0HS_HMNSf9WWgiUDAyhe1mvlW4eZbTDfg2Al34YauJ_rpPSCw6vwnvpqp9Yvh9Vl0r1k8o_bm_2-NjiVINqdRALmaORbFGu2S9CJso5Jcio_jrWSzznIkf6Jopw9ar8Ca_Cf_KV6cmLOOx2XgWXV7WMCkSIPQXFXrtxE4hnfXEd8K5S5HLgch0hPgJPpgL91x1i73MP1gQyYoWNFCip9cDDlDvPO1zG28O12c4H4bsdy1jaaOOOv34yECfgA87RIFCbGtrzd_9QBXDse51L1IFJu8B6sotyk_4QcGcKSWzOPjI8L2_xhPIG54qk0lzqNWeVHo2UbNpBB6u2OJnszKC44BH5hneYoTbqMGK_1Uo2jR14XixvBlZydXXquuTmDVoBj2ygfjlnZ6UWJenQIO_bLEkF2iaWcgbOhJ6S197k"
//分解字符串以仅获取令牌
$auth_header=explode(“”,$access_令牌);
$token=$auth_头[1];
//把代币分成三部分
$token_parts=分解('.',$token);
$token_header=$token_parts[0];
//base64解码以获取json字符串
$token\u header\u json=base64\u decode($token\u header);
//您将通过提供的令牌获得此信息:
//{“类型”:“JWT”,“alg”:“RS256”,“jti”:“9fdb0dc4382f2833ce2d3993c670fafb5a7e7b88ada85f490abb90ac211802720a0fc7392c3f2e7c”}
//然后将json转换为数组
$token\u header\u array=json\u decode($token\u header\u json,true);
一旦你有了这个,你可以在
jti
键中找到用户的令牌:

$user\u token=$token\u header\u数组['jti'];
您可以让用户使用它:

//从oauth访问令牌表中查找用户ID
//根据我们刚拿到的代币
$user\u id=DB::table('oauth\u access\u tokens')->其中('id',$user\u token)->value('user\u id');
//然后从用户的主键中检索用户
$user=user::findOrFail($user\u id);

不需要启用身份验证中间件。您可以使用
auth('api')->user()
获取活动用户。如果不存在令牌,则为空。

请尝试以下操作:

 $user = Auth::guard('users')->user();
 $name = $user->name;

您是否已检查我如何将令牌与请求正文一起发送,并检查用户是否已授权我不想使用Headers,因为用户id不在JWT有效负载中?