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

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

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

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

Q&A

解決済

1回答

3742閲覧

LaravelのAPIでAuthが使えない

mattun_evo

総合スコア9

Laravel

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

0グッド

2クリップ

投稿2020/01/13 09:17

現在Laravel Framework 6.10.1において、Laravel+Vueでウェブアプリを作成しています。

bladeファイル上ではAuthが使えるのですが、LaravelのAPIを通じてレスポンスでAuthを返そうとすると、nullになります。

おそらく公式の
https://readouble.com/laravel/6.x/ja/api-authentication.html
この部分の後半をやっていないことが原因だとは思うのですが、
「ハッシュ済みトークンの生成」という項目の部分が全く理解できなく、この作成したコントローラを具体的にどのように使えば良いのかわかりません・・・。

恐れ入りますが、教えていただけると幸いです。

現在の状況
上のデータはbladeファイルに直書きして出したAuthの情報です
イメージ説明

APIの呼び出しはうまくいっており、Authの値だけが返ってきません。
画像を展開すると、レスポンスがnullになっています。
イメージ説明

現在のコード

php

1//ProfileController 2<?php 3 4namespace App\Http\Controllers\Api; 5 6use App\Http\Controllers\Controller; 7use Illuminate\Http\Request; 8use App\User; 9use Illuminate\Support\Facades\Auth; 10 11class ProfileController extends Controller 12{ 13 public function show() 14 { 15 // $profile = User::find(Auth::user()); 16 17 $profile = Auth::user(); 18 // $profile = User::find(1); 19 return response()->json(['profile'=>$profile], 200); 20 } 21}

php

1//main.blade.php 2<?php 3use Illuminate\Support\Facades\Auth; 4 5$user = Auth::user(); 6?> 7<!DOCTYPE html> 8<html lang="{{ str_replace('_', '-', app()->getLocale()) }}"> 9 <head> 10 <meta charset="utf-8"> 11 <meta name="viewport" content="width=device-width, initial-scale=1"> 12 13 <title>Laravel</title> 14 <link rel="stylesheet" href="{{asset('css/app.css')}}"> 15 16 </head> 17 <body> 18 <?php 19 20 21echo $user; 22 ?> 23 <div id="app"> 24 <app-component /> 25 </div> 26 <script src="{{asset('js/app.js')}}"></script> 27 </body> 28</html>

調べているとキャッシュとかにtokenを持たせないといけないのかな・・・などと推測してはいるのですが、はまってしまったので助けていただければと思います。よろしくお願いします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

最初は「トークンのハッシュ」「ハッシュ済みトークンの生成」の部分は無視していい。関係ない。

この場合はたぶんapi_tokenも全部無視していい。

重要なのはルーティングをroutes/web.phpに書くこと。
routes/api.phpに書きがちだけどLaravel+Vueを同一オリジンで普通に使ってる場合はapi.phpではない。ここはよく間違えられてる。

認証情報はセッションで持ってる。
Laravelでログインした状態はVueにも引き継がれるのでaxios.getでも何も気にせず認証された状態。

Route::middleware('auth')->get('api/profile', 'ProfileController@show');

このauthauth:webを省略している。
app/Http/Kernel.php $middlewareGroupsのweb
routes/web.php
webで揃えれば正しく動くように作られている。

同一オリジンではない場合は前提が全部変わるのでapiで揃える。

投稿2020/01/13 11:05

kawax

総合スコア10377

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

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

mattun_evo

2020/01/13 13:28 編集

おかげさまで、Kernel.phpの'api'に ```php \App\Http\Middleware\EncryptCookies::class, \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class, \Illuminate\Session\Middleware\StartSession::class, \Illuminate\View\Middleware\ShareErrorsFromSession::class, ``` 追記するのを完全に失念していたことにより、うごかなかったことが判明しました。 ただ、同一オリジンの場合は、web.phpで処理を書くというのは目から鱗でした・・・。 本当にありがとうございます!そのようにして進めたいと思います。 もしよろしければ追加で教えていただければと思うことがありまして、 今後、スマホアプリへのスケールを考えて、LaravelをAPIで運用することを視野に入れるとすれば、api_tokenの理解と運用が必要になってくるでしょうか? 最初の段階ですべき最低限度これだけは絶対必要という項目があれば教えていただきたいです。 もしよろしければご回答いただけると嬉しいです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問