質問編集履歴
1
質問内容が曖昧だったので詳細を追記。
test
CHANGED
@@ -1 +1 @@
|
|
1
|
-
|
1
|
+
Laravel Passportを使用してログインユーザーの情報を取得したい
|
test
CHANGED
@@ -1,12 +1,16 @@
|
|
1
|
-
##
|
1
|
+
## 現状
|
2
|
+
|
2
|
-
|
3
|
+
Laravel Passportをインストールすることで
|
4
|
+
|
3
|
-
|
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
|
-
|
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
|
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
|
+
```
|