前提・実現したいこと
です。
現在、NuxtとRailsを使用して投稿機能の付いたアプリを製作中です。
トップページにてユーザーの投稿一覧を表示する機能を実装中に伴い下記の問題が発生しております。
LocalStorage内に認証トークンを保持したいのですが、
格納された認証トークン等がundefinedになってしまいます。
ログインした直後トークン等はLocalStorage内に保存されているのですが、
ページをリロードするとundefinedになってしまいます。
LocalStorage内の認証トークンを保持するには下記の設定以外に設定が必要なのでしょうか。
問題が発生している箇所はおそらくindex.vueに定義してあるcreated()であると考えております。
発生している問題・エラーメッセージ
chrome コンソール
access-token undefined client undefined uid undefined token-type undefined
該当のソースコード
pages/index.vue
export default { // 省略 created() { this.$store.dispatch('post/getPosts') }, // 省略
store/post.js
export const state = () => ({ posts: [], }) export const getters = { posts: state => state.posts, } export const mutations = { setPosts(state, postData) { state.posts = postData } } export const actions = { async getPosts({ commit }) { await this.$axios.get('/posts') .then(res => { console.log(res) commit('setPosts', res.data) }) .catch(e => { console.log(e.response) }) }
plugins/axios.js
export default function({ $axios }) { $axios.onRequest(config => { config.headers['access-token'] = window.localStorage.getItem('access-token') config.headers['token-type'] = window.localStorage.getItem('token-type') config.headers.uid = window.localStorage.getItem('uid') config.headers.client = window.localStorage.getItem('client') }) $axios.onResponse(res => { localStorage.setItem('access-token', res.headers['access-token']) localStorage.setItem('token-type', res.headers['token-type']) localStorage.setItem('uid', res.headers.uid) localStorage.setItem('client', res.headers.client) }) }
package.json
"dependencies": { "@nuxtjs/auth": "^4.9.1", "@nuxtjs/axios": "^5.13.6", "core-js": "^3.15.1", "nuxt": "^2.15.7", // 省略
nuxt.config.js
plugins: [ '~/plugins/axios.js', { src: '~/plugins/localStorage.js', ssr: false} ], modules: [ '@nuxtjs/axios', '@nuxtjs/auth' ], axios: { baseURL: process.env.NODE_ENV === 'production' ? 'https://locals-apps.com/api/v1' : 'http://localhost:5000/api/v1' }, router: { middleware: ['auth'] }, auth: { redirect: { login: '/', logout: '/', callback: false, home: '/' }, strategies: { local: { endpoints: { login: { url: '/auth/sign_in', method: 'post', propertyName: 'access-token'}, logout: { url: '/auth/sign_out', method: 'delete'}, user: false } } } },
試したこと
index.vue内のcreated()内でどうやらaxiosを使用するとlocalStorageがundefinedになることがわかっております。
axiosの設定やライフサイクル等に問題があると考え、
axiosのドキュメントやnuxtのドキュメントのライフサイクルについて調べましたが問題点が見つかりませんでした。
localStorageではなくcookie等の他の方法を試みるべきでしょうか。
よろしくお願いいたします。
補足情報(FW/ツールのバージョンなど)
Nuxt.js '2.15.7'
rails '6.1.4'
あなたの回答
tips
プレビュー