#状況
laravel8でReact×TypeScriptのアプリケーションを作成中
認証はlaravel-uiで行っている
laravelでapiを作成して、ログインユーザーの情報をReact側のaxiosで受け取りたい
#解決したいこと
apiの中でAuth:id()でidを取得できない
#ソース
api.php
Route::get('/users', function(Request $request) { $id = Auth::id(); // $id = 4; $users = DB::table('users')->where("users.id",$id)->get(); $users = $request->user(); return response()->json(['users' => $users]); });
User.tsx
import { useEffect, useState, VFC } from 'react'; import axios from 'axios'; type usersType = [ { id: string; name: string; email: string; created_at: string; updated_at: string; email_verified_at: string; } ]; export const User: VFC = () => { const [users, setUsers] = useState<usersType>(); useEffect(() => { getUsers(); }, []); const getUsers = async () => { const response = await axios.get('/api/users'); setUsers(response.data.users); console.log(response.data.users); }; return ( <div> <h1>Userページ</h1> <ul> {users?.map((user) => ( <li key={user.id}>{user.name}</li> ))} </ul> </div> ); };
api.phpのidの部分を手打ちで打つとデータは取れるのでデータの取得自体は出来ている。
Auth::id()でなぜidが取れないのかがわからない。
web.phpの方のブレードファイル内ではAuth:id()で取得することができていた。
#やったこと
ミドルウェアに問題があるとの記事を見つけたのでKernel.phpを変更したが変化なし。
kernel.php
・・・ protected $middlewareGroups = [ 'web' => [ \App\Http\Middleware\EncryptCookies::class, \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class, \Illuminate\Session\Middleware\StartSession::class, \Illuminate\Session\Middleware\AuthenticateSession::class, \Illuminate\View\Middleware\ShareErrorsFromSession::class, \App\Http\Middleware\VerifyCsrfToken::class, \Illuminate\Routing\Middleware\SubstituteBindings::class, \App\Http\Middleware\HandleInertiaRequests::class, ], 'api' => [ 'throttle:api', \App\Http\Middleware\EncryptCookies::class, \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class, \Illuminate\Session\Middleware\StartSession::class, \Illuminate\Session\Middleware\AuthenticateSession::class, \Illuminate\View\Middleware\ShareErrorsFromSession::class, \App\Http\Middleware\VerifyCsrfToken::class, \Illuminate\Routing\Middleware\SubstituteBindings::class, \App\Http\Middleware\HandleInertiaRequests::class, ] ]; ・・・
なぜかコントローラーを作ってやろうとするとデータが取れなくなってしまうため、api.phpにてfunctionを書いています。
また、この方法しか思いつかなかったのですが、他にデータ取得の方法があれば教えてほしいです。
バックエンド自体触るのが初めてで全くわからないので、Auth:id()で取得できない理由を教えていただけると幸いです。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/08/25 01:25
2021/08/25 02:13
2021/08/25 03:11
2021/08/25 03:14