前提・実現したいこと
Nuxt×laravelで開発を行っており、jwtで認証を行いNuxt側でlaravelで発行されてtokenを利用したいと考えています
Nuxtではauthモジュールを使用しており、/loginと/meをauthモジュールによってaxiosを使って通信するようになっているのですが
/meはmiddlewareでauth:apiを指定しており、未認証の場合はアクセスできないようルートを設定しています
/loginはログイン処理をしてtokenを返却する
/meはAuth::user()でユーザーの情報を所得すると言う形になっています
axiosでrequestヘッダーに/loginで所得したtokenをのせて/meにアクセスしuser情報を所得したいのですが
401エラーとなってしまいます。
下記コードから間違っている部分や、修正点などアドバイス頂けないでしょうか
発生している問題・エラーメッセージ
GET http://localhost:3000/api/me 401 (Unauthorized)
該当のソースコード
php
1//LoginController.php 2 3login() 4{ 5 //ログイン処理 6 7 return [ 8 'token' => $token 9 ]; 10} 11
Nuxt
1//nuxt.comfig.js 2 3 auth: { 4 redirect: { 5 login: '/login', 6 logout: '/login', 7 callback: false, 8 home: '/', 9 }, 10 strategies: { 11 local: { 12 endpoints: { 13 login: { url: '/api/auth/login', method: 'post', propertyName: 'token' }, 14 user: { url: '/api/me', method: 'get', propertyName: false }, 15 logout: false 16 }, 17 } 18 } 19 },
Nuxt
1//login.vue 2<template> 3 <form> 4 Email<input type="text" v-model="loginForm.email"><br> 5 Password <input type="password" v-model="loginForm.password"><br> 6 <input type="submit" @click.prevent="login"> 7 </form> 8</template> 9 10<script> 11 export default { 12 middleware({ store, redirect }){ 13 if(store.$auth.logedIn){ 14 redirect('/'); 15 } 16 }, 17 data(){ 18 return { 19 loginForm: { 20 email: '', 21 password: '' 22 } 23 } 24 }, 25 methods: { 26 login() { 27 this.$auth.loginWith('local', { data: this.form }); 28 } 29 } 30 } 31</script>
Nuxt
1//axios.js 2 3export let axios; 4 5export default ({ store, $axios }) => { 6 $axios.onRequest(config => { 7 console.log('実行'); 8 console.log(store.$auth.getToken('local')); 9 config.headers.common['Authorization'] = 'Bearer' + store.$auth.getToken('local'); 10 config.headers.common['Accept'] = 'application/json'; 11 }); 12 13 $axios.onResponse(response => { 14 return Promise.resolve(response); 15 }) 16 17 $axios.onError(error => { 18 return Promise.reject(error.response); 19 }); 20 21 axios = $axios; 22} 23
試したこと
nuxt.config.jsのauthに定義してある箇所で最初に/api/auth/loginにアクセスがありその後に/api/meにアクセスがあると考えており
/api/auth/loginにアクセスした際にlaravel側からtokenが返却されていると思っています
その後/api/meにtokenをセットしたheaderを送信してユーザー情報を所得できると考えてろい
axios.jsにcosole.logで実装されている状態を確認したところ、axiosのアクセスの度に実行はされているようなんですが
store.$auth.getToken('local')この部分でtokenを所得できていないようで
コンソールに表示されるヘッダーがBearer undefinedとなってしまっています。
/api/auth/loginの返却値であるtokenを所得し
axios.jsの7行目のconfig.headers.common['Authorization']の部分にtokenを設定したいです。
補足情報(FW/ツールのバージョンなど)
laravel 6.13.1
Nuxt 2.11.0
あなたの回答
tips
プレビュー