質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

Authentication

Authentication(認証)は正当性を認証する為の工程です。ログイン処理等で使われます。

Q&A

0回答

1173閲覧

Laravel Passportを使用してログインユーザーの情報を取得したい

naUc

総合スコア36

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

Authentication

Authentication(認証)は正当性を認証する為の工程です。ログイン処理等で使われます。

0グッド

0クリップ

投稿2021/08/31 07:08

編集2021/09/06 04:53

現状

Laravel Passportをインストールすることで
他アプリケーションから、Laravelに登録されたユーザーのアクセストークン取得、
アクセストークンからユーザ情報取得まで行なっております。
Postmanで実行するとJSONにてユーザー情報取得できました。

##構成
PHP8, MYSQL8
A : http://exampleA.com : laravel8
B : http://exampleB.com : laravel以外、CMSなど

何がしたいか

laravel Passport の公式ドキュメントなどみたのですが、認可コードからアクセストークンを取得する際、
テストコードでは事前にClient_id, Client_secret,redirect_urlを設定しておりますが、
この値はユーザー毎に変化するかと思われます。

そこで、Aにログインしているユーザ情報からClient情報(id,secret,redirect_url)を取得できればと思い、
APIにてユーザ情報を取得するAPI:getを記述し、Bから実行したのですが(既にAでログイン済)
ドメインが異なるのか、ログインユーザーの情報が取得できませんでした。

既にログインされているシステムのユーザー情報を別のドメインからアクセストークンなどを使用せずに、取得できるのでしょうか?

過去質問も一度読んでみたのですが、

  • ドメインが異なる
  • 既にLaravel Passport を実装している

ことからこちらの求めている質問と違うものかと感じました。
teratail:Lalavel でログインしているか外部から確認したい

##やってみたこと

  1. 先にAのlaravelでログインし、routes/api.php にてapiを書いてBのシステム上からAのlaravelに向けて実行してみたのですが、ログイン画面が表示されユーザー情報の取得はできませんでした。

  2. 将来的にサードパーティCookieは使用できなくなる可能性があるとは聞いていましたが、

Aのlaravel内にてクライアント情報のCookieを発行し、BのlaravelからCookieを取得することでアクセストークンを取得、
アクセストークンから Aのlaravelにアクセスしてユーザー情報取得はできました。

コード

A: laravelに記載

php

1//routes/api.php 2use App\Http\Controllers\AuthJudgeController; 3Route::get('/auth_client', [AuthJudgeController::class,'authJudge']);

php

1//App/Http/Controllers/AuthJudgeController :api 2<?php 3namespace App\Http\Controllers; 4 5use Illuminate\Http\Request; 6use Illuminate\Support\Facades\Auth; 7 8class AuthJudgeController extends Controller 9{ 10 public function authJudge(){ 11 if (Auth::check()) { 12 $user = Auth::user(); 13 $data = json_encode($user->name,$user->mail); 14 $json = json_decode($data, true); 15 return $json; 16 } 17 return "Error"; 18 } 19}

A:Laravel Passport使用のためapi : driverをpassportに変更。

php

1//config/auth.php 2'guards' => [ 3 'web' => [ 4 'driver' => 'session', 5 'provider' => 'users', 6 ], 7 8 'api' => [ 9 'driver' => 'passport', 10 'provider' => 'users', 11 ], 12],

B:クライアント 認可コードからアクセストークンを取得する

php

1<?php 2// 3require 'vendor/autoload.php'; 4use GuzzleHttp\Client as Client; 5$http = new Client; 6 7if($_GET['code']){ 8 //理想はアクセストークンを取得前にログイン中のUserIdからclient情報を取得したいが 9 //実行後にログイン画面が表示 10 //ユーザーに対して、それぞれclient_id,client_secret,redirect_uriが必要。 11 $client = $http->request('GET','http://127.0.0.1:8080/api/auth_client',[]); 12 13 //トークンエンドポイントにアクセスすることでアクセストークンを取得 14 $response = $http->post('http://127.0.0.1:8080/oauth/token',[ 15 'form_params' => [ 16 'grant_type' => 'authorization_code', 17 'client_id' => $client->id, 18 'client_secret' => $client->secret, 19 'redirect_uri' => $client->redirect, 20 'code' => $_GET['code'], 21 ], 22 ]); 23 24 $res = json_decode((string)$response->getBody(), true); 25 echo "access_token: ".$res['access_token'] ."<br>"; 26 echo "<br>認可コード:".$_GET['code']."<br><br>"; 27} 28

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

AbeTakashi

2021/08/31 14:10

「ログイン画面が表示されユーザー情報の取得はできませんでした。」とありますが、その際のLaravelのサーバのログはどうなってるのでしょうか? 401ならただ認証に失敗しているだけだと思います。外部からアクセスする場合はトークンつけるなりしてアクセスすればいいだけではないでしょうか? 参考) https://www.whizz-tech.co.jp/1442/ 最後のテストの所を参考にしてテストしてみればいかがでしょう それともそれ以外のエラーが出ていたりするのでしょうか? その辺の情報がないので、現状だと回答が出にくい状況だと思います。少なくとも「ユーザーデータ取得は可能なのでしょうか?」という質問に対しては、おそらく可能だと思いますが、状況が分からないので具体的な回答はできません。
naUc

2021/09/06 04:58

コメントありがとうございます、質問内容が曖昧でした。 ユーザ情報からOath接続に必要な認可コードを取得するためのクライアント情報が必要でしたので、 内容を修正してみました。 A:Laravel(logs/laravel.log)のログではエラーが確認できませんでした。 ご確認お願いできますでしょうか
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問