Laravel 在不使用auth中间件的情况下,如何通过令牌获取用户id?
在Laravel5.4中,使用oauth2/passport,我有一个公共的路由,所以我不使用中间件auth 此路由由登录和未登录的用户访问 我想获取访问此路由的用户id o(如果已登录)。如果不通过参数或类似的方式传递用户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
$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有效负载中?