質問編集履歴

1

質問内容が曖昧だったので詳細を追記。

2021/09/06 04:53

投稿

naUc
naUc

スコア36

test CHANGED
@@ -1 +1 @@
1
- 外部から Laravelにアクセスしてログインユーザーの情報を取得したい
1
+ Laravel Passportを使用してログインユーザーの情報を取得したい
test CHANGED
@@ -1,12 +1,16 @@
1
- ## 前提・実したいこと
1
+ ## 現
2
+
2
-
3
+ Laravel Passportをインストールすることで
4
+
3
- ドメインが異なるアプリケーションからAPIを実行することでLaravelに登録されているユーザー情報を取得できないか?と
5
+ アプリケーションからLaravelに登録されユーザーのアクセストークン取得
4
-
6
+
5
- 考えたのですが、実現方法を教えてください
7
+ アクセストークンからユーザ情報取得ま行なっております。
8
+
6
-
9
+ Postmanで実行するとJSONにてユーザー情報取得できました。
7
-
8
-
10
+
11
+
12
+
9
- 構成
13
+ ##構成
10
14
 
11
15
  PHP8, MYSQL8
12
16
 
@@ -16,11 +20,25 @@
16
20
 
17
21
 
18
22
 
23
+ ## 何がしたいか
24
+
25
+ laravel Passport の公式ドキュメントなどみたのですが、認可コードからアクセストークンを取得する際、
26
+
27
+ テストコードでは事前にClient_id, Client_secret,redirect_urlを設定しておりますが、
28
+
29
+ この値はユーザー毎に変化するかと思われます。
30
+
31
+
32
+
33
+ そこで、Aにログインしているユーザ情報からClient情報(id,secret,redirect_url)を取得できればと思い、
34
+
35
+ APIにてユーザ情報を取得するAPI:getを記述し、Bから実行したのですが(既にAでログイン済)
36
+
37
+ ドメインが異なるのか、ログインユーザーの情報が取得できませんでした。
38
+
39
+
40
+
19
- 上記構成ですが、BのドメインからAPI実行よりユーザーデータ取得は可能なのでしょうか?
41
+ 既にログインされているシステムユーザー情報を別のドメインからアクセストークンなどを使用せず取得できるのでしょうか?
20
-
21
- (実際は、ログインされたユーザーのIdなどを元に別テーブルから情報を取得することが目的です。)
22
-
23
- どういった知識、理解が必要なのかご教授お願いいたします。
24
42
 
25
43
 
26
44
 
@@ -30,42 +48,30 @@
30
48
 
31
49
  - 既にLaravel Passport を実装している
32
50
 
33
-
34
-
35
51
  ことからこちらの求めている質問と違うものかと感じました。
36
52
 
37
53
  [teratail:Lalavel でログインしているか外部から確認したい](https://teratail.com/questions/97773)
38
54
 
39
55
 
40
56
 
41
- ## 現状
42
-
43
- Laravel Passportをインストールすることで
44
-
45
- 他アプリケーションからのLaravelに登録されたユーザー情報を取得する
46
-
47
- アクセストークン取得まで行なっております。
48
-
49
- Postmanで実行するとJSONにてユーザー情報取得も可能です。
50
-
51
-
52
-
53
57
  ##やってみたこと
54
58
 
55
- 1. 先にlaravelでログインし、routes/api.php にてapiを書いてBのシステムから実行してみたのですが、
59
+ 1. 先にAのlaravelでログインし、routes/api.php にてapiを書いてBのシステムからAのlaravelに向けて実行してみたのですが、ログイン画面が表示されユーザー情報の取得はできませんでした。
56
-
57
- ログイン画面が表示されユーザー情報の取得はできませんでした。
58
60
 
59
61
 
60
62
 
61
63
  2. 将来的にサードパーティCookieは使用できなくなる可能性があるとは聞いていましたが、
62
64
 
65
+ Aのlaravel内にてクライアント情報のCookieを発行し、BのlaravelからCookieを取得することでアクセストークンを取得、
66
+
63
- laravelにてCookieを発行し情報取得はできました。
67
+ アクセストークンから Aのlaravelにアクセスしユーザー情報取得はできました。
64
68
 
65
69
 
66
70
 
67
71
  ## コード
68
72
 
73
+ A: laravelに記載
74
+
69
75
  ``` php
70
76
 
71
77
  //routes/api.php
@@ -120,7 +126,7 @@
120
126
 
121
127
  ```
122
128
 
123
- Laravel Passport使用のため`api` : driverを`passport`に変更。
129
+ A:Laravel Passport使用のため`api` : driverを`passport`に変更。
124
130
 
125
131
  ``` php
126
132
 
@@ -149,3 +155,67 @@
149
155
  ],
150
156
 
151
157
  ```
158
+
159
+
160
+
161
+ B:クライアント 認可コードからアクセストークンを取得する
162
+
163
+ ``` php
164
+
165
+ <?php
166
+
167
+ //
168
+
169
+ require 'vendor/autoload.php';
170
+
171
+ use GuzzleHttp\Client as Client;
172
+
173
+ $http = new Client;
174
+
175
+
176
+
177
+ if($_GET['code']){
178
+
179
+ //理想はアクセストークンを取得前にログイン中のUserIdからclient情報を取得したいが
180
+
181
+ //実行後にログイン画面が表示
182
+
183
+ //ユーザーに対して、それぞれclient_id,client_secret,redirect_uriが必要。
184
+
185
+ $client = $http->request('GET','http://127.0.0.1:8080/api/auth_client',[]);
186
+
187
+
188
+
189
+ //トークンエンドポイントにアクセスすることでアクセストークンを取得
190
+
191
+ $response = $http->post('http://127.0.0.1:8080/oauth/token',[
192
+
193
+ 'form_params' => [
194
+
195
+ 'grant_type' => 'authorization_code',
196
+
197
+ 'client_id' => $client->id,
198
+
199
+ 'client_secret' => $client->secret,
200
+
201
+ 'redirect_uri' => $client->redirect,
202
+
203
+ 'code' => $_GET['code'],
204
+
205
+ ],
206
+
207
+ ]);
208
+
209
+
210
+
211
+ $res = json_decode((string)$response->getBody(), true);
212
+
213
+ echo "access_token: ".$res['access_token'] ."<br>";
214
+
215
+ echo "<br>認可コード:".$_GET['code']."<br><br>";
216
+
217
+ }
218
+
219
+
220
+
221
+ ```