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

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

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

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

PHP

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

API

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

Authentication

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

受付中

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

naUc
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評価

0クリップ

417閲覧

投稿2021/08/31 07:08

編集2022/01/12 10:55

現状

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

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

php

//App/Http/Controllers/AuthJudgeController :api <?php namespace App\Http\Controllers; use Illuminate\Http\Request; use Illuminate\Support\Facades\Auth; class AuthJudgeController extends Controller { public function authJudge(){ if (Auth::check()) { $user = Auth::user(); $data = json_encode($user->name,$user->mail); $json = json_decode($data, true); return $json; } return "Error"; } }

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

php

//config/auth.php 'guards' => [ 'web' => [ 'driver' => 'session', 'provider' => 'users', ], 'api' => [ 'driver' => 'passport', 'provider' => 'users', ], ],

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

php

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

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

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)のログではエラーが確認できませんでした。 ご確認お願いできますでしょうか

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

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

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Laravel

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

PHP

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

API

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

Authentication

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