2017-02-23 6 views
2

oauth2 /パスポートを使用しているLaravel 5.4では、公開されているルートがあるため、私はミドルウェア認証を使用しません。認証ミドルウェアを使用しない場合、トークンでユーザーIDを取得する方法は?

このルートは、ユーザーによってアクセスされるには、ログインしてログインしていません。

私は(ログインしている場合)、このルートにアクセスしているユーザーID 0を取りたいです。パラメータなどでユーザー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" 

+0

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

答えて

4

認証ミドルウェアを有効にする必要はありません。 auth('api')->user()を使用すると、アクティブなユーザーを取得できます。トークンが存在しない場合はnullになります。

1

トークンでユーザーを取得するには、トークンが何であるかを理解する必要があります。

トークンは、ヘッダー、ペイロード、および署名をピリオドで区切って3つの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']; 

そして、あなたはそれを使用してユーザーを取得することができます:

// 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

を確認しましたか?リクエストボディでトークンを送信し、ユーザーが承認したかどうかを確認する方法はありますか? –

関連する問題