2017-02-23 11 views
2

oauth2/passport를 사용하는 Laravel 5.4에서 공개 경로가 있으므로 미들웨어 인증을 사용하지 않습니다.인증 미들웨어를 사용하지 않고 토큰별로 사용자 ID를 얻는 방법은 무엇입니까?

이 경로는 로그인 한 사용자가 액세스 및 접속되지 않았습니다.입니다

내가 (로그인 한 경우)이 경로에 액세스하는 사용자 ID O를 먹고 싶어. 매개 변수 또는 이와 유사한 사용자 ID를 전달하지 않고 (토큰과 함께) 가능합니까?

I에 의해 사용자 토큰을 얻을 수 있습니다 :

$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" 

나는이 토큰으로 사용자를 찾을하는 방법을 모르겠어요.

+0

https://github.com/tymondesigns/jwt-auth/wiki/Authentication –

답변

4

인증 미들웨어를 활성화 할 필요가 없습니다. auth('api')->user()을 사용하여 활성 사용자를 확보 할 수 있습니다. 토큰이 존재하지 않는 경우는 null가됩니다.

1

토큰으로 사용자를 얻으려면 토큰이 무엇인지 이해해야합니다.

토큰은 세 개의 base64로 인코딩 된 부분으로 나뉩니다. 헤더, 페이로드 및 서명은 마침표로 구분됩니다. 그냥 사용자를 찾을하고자하고 있기 때문에 귀하의 경우에는, 당신은 단지 헤더를 얻기 위해 header

이 필요합니다, 당신은 같은 것을 할 수 있습니다

// break up the string to get just the token 
$auth_header = explode(' ', $access_token); 
$token = $auth_header[1]; 
// break up the token into its three parts 
$token_parts = explode('.', $token); 
$token_header = $token_parts[0]; 

// base64 decode to get a json string 
$token_header_json = base64_decode($token_header); 
// you'll get this with the provided token: 
// {"typ":"JWT","alg":"RS256","jti":"9fdb0dc4382f2833ce2d3993c670fafb5a7e7b88ada85f490abb90ac211802720a0fc7392c3f2e7c"} 

// then convert the json to an array 
$token_header_array = json_decode($token_header_json, true); 

이이 있으면, 당신이 할 수있는

$user_token = $token_header_array['jti']; 

그리고 당신은 그 사용하여 사용자를 얻을 수 있습니다 : 다음 jti 키에 사용자의 토큰을 찾을 수

// find the user ID from the oauth access token table 
// based on the token we just got 
$user_id = DB::table('oauth_access_tokens')->where('id', $user_token)->value('user_id'); 

// then retrieve the user from it's primary key 
$user = User::findOrFail($user_id); 

More info on jwt's.

+0

을 확인 했습니까? 요청 본문과 함께 토큰을 보내고 승인 된 사용자인지 또는 내가 헤더를 사용하고 싶지 않은지 확인하려면 어떻게해야합니까? –