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

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

新規登録して質問してみよう
ただいま回答率
85.35%
Nuxt.js

Nuxt.jsは、ユニバーサルなSPAが開発可能なVue.jsベースのフレームワーク。UIの描画サポートに特化しており、SSRにおけるサーバーサイドとクライアントサイドのUIレンダリングなどさまざまな機能を持ちます。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

0回答

1419閲覧

LocalStorageが消えてしまう

soicchi

総合スコア0

Nuxt.js

Nuxt.jsは、ユニバーサルなSPAが開発可能なVue.jsベースのフレームワーク。UIの描画サポートに特化しており、SSRにおけるサーバーサイドとクライアントサイドのUIレンダリングなどさまざまな機能を持ちます。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

0クリップ

投稿2021/12/09 11:29

前提・実現したいこと

です。

現在、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'

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問