Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Nuxt の Store 永続化の話
Search
Yamaguchi Takahiro
May 24, 2019
Technology
1.2k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Nuxt の Store 永続化の話
Yamaguchi Takahiro
May 24, 2019
More Decks by Yamaguchi Takahiro
See All by Yamaguchi Takahiro
関西Kaggler会_不確実性最適化ゲーム入門
nyk510
1
1.1k
コンペを気楽に開催しよーぜ!@関西Kaggler会
nyk510
0
1.5k
Django のセキュリティリリースを見る
nyk510
0
140
3分でMLアプリを作る 〜推論コードにちょっとのStreamlitを添えて〜
nyk510
1
1.2k
硬派で真面目なグラフを描く
nyk510
0
580
CORSをちゃんと理解する atmaバックエンド勉強会#4
nyk510
0
470
pythonで気軽にパッケージを作るのは良いという話。
nyk510
14
9.9k
RestAPIのページネーション atma バックエンド勉強会 #3
nyk510
1
1.1k
AWS CPU Credit を完全に理解する
nyk510
0
530
Other Decks in Technology
See All in Technology
株式会社シーエーシー エンジニア向け会社紹介資料
cac
0
57k
積み重なった技術負債への挑戦 〜初手としての全社ゴト化〜
techtekt
PRO
0
1.5k
データ界隈LT祭 第1回LT登壇
taromatsui_cccmkhd
2
1.5k
JSONataとAWS Step Functionsで目指すRuntimelessな世界
mu7889yoon
0
400
ScotSecure West 2026 - Glasgow
raybugg
0
150
Slack上でインフラをトラブルシュートする! Agentic Platform Engineeringの第一歩
teru0x1
5
1.8k
フルカイテン株式会社 エンジニア向け採用資料
fullkaiten
0
12k
beyond jj: config & tools ecosystem
indirect
0
5.7k
Genieを崇めよ
kameitomohiro
0
170
安心して変更できるWebフロントエンドの作り方
pirosikick
5
2.9k
C#コードの結合を可視化する Roslyn解析による設計改善と リファクタリング判断
dora56
0
330
Von-Neumann Machines, Dreams & The Futures of IT
ufried
0
120
Featured
See All Featured
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
46
3k
Navigating the Design Leadership Dip - Product Design Week Design Leaders+ Conference 2024
apolaine
2
430
Writing Fast Ruby
sferik
630
63k
Visual Storytelling: How to be a Superhuman Communicator
reverentgeek
2
670
Reality Check: Gamification 10 Years Later
codingconduct
0
2.3k
Un-Boring Meetings
codingconduct
0
420
Building an army of robots
kneath
307
46k
How GitHub (no longer) Works
holman
316
150k
世界の人気アプリ100個を分析して見えたペイウォール設計の心得
akihiro_kokubo
PRO
74
42k
Building Applications with DynamoDB
mza
96
7.2k
エンジニアに許された特別な時間の終わり
watany
109
250k
AI Search: Implications for SEO and How to Move Forward - #ShenzhenSEOConference
aleyda
1
1.4k
Transcript
Nuxt の Store 永続化の話 2019/05/24 @nyker_goto
結論 • universal の時は cookie storage つかえ • spa の時は
localstorage で OK. ssr: false は要らない
じこしょうかい @nyker_goto (twitter) 本業? • データサイエンティスト (新卒3年目) • kaggle master
なんやかんやで backend/front/インフラもします. 一番フロントが好き。イ ンフラは大変… 3
前提条件 • Nuxt.js + Rest API をつかった一般的?な SPA ◦ universal
mode (mode = “universal”) • Rest API は JWT で認証を行う • 一時的にログイン状況が必要なのではなくどのページでも認証が必要なエン ドポイントを使用する可能性がある (i.e. vuex で token を管理している)
こまること • Store の値はブラウザをリロードすると消える。都度ログインするのはだるい。 → Store の値を保持したい!!! これを永続化 persistenced ~~
といいます
vuex の store 永続化 vuex-persistedstate: https://github.com/robinvdvleuten/vuex-persistedstate スターたくさん (3091ぐらい) README.md では
nuxt だとこうやれと書いている // nuxt.config.js ... plugins: [{ src: '~/plugins/localStorage.js' , ssr: false }] ... // ~/plugins/localStorage.js import createPersistedState from 'vuex-persistedstate' export default ({store}) => { window.onNuxtReady(() => { createPersistedState ({ key: 'yourkey', paths: [...] ... })(store) }) }
このやり方の問題点 local-storage を使っている 初期値では universal mode の時は SSR が有効になっている local(ブラウザ)
に到達するまで store は空っぽ 要するにサーバーサイドレンダリングするときには store は空っぽ → サーバー内で token が必要な時ログインしていないことになる (asyncData, や nuxtServerInit, middleware など)
なので cookie-storage つかいましょう ( yarn add js-cookie をお忘れなく) import createPersistedState
from 'vuex-persistedstate' import * as Cookies from 'js-cookie' import cookie from 'cookie' export default ({ store, req, isDev }) => { createPersistedState ({ key: 'your-application-name' , storage: { getItem: key => process.client ? Cookies.getJSON(key) : cookie.parse(req.headers.cookie || '')[key], setItem: (key, value) => Cookies.set(key, value, { expires: 365, secure: !isDev }), // 365日間 cookie storage を保持する removeItem: key => Cookies.remove(key) } })(store) }
注意点と若干の補足 • Cookie-Storage は secure: true のとき https 通信時のみ有効になります。ちゃん と
SSL を付与しておかないと永続化できてねえ?! ってなりますのでご注意 (process.env.NODE_ENV で切り替えるようにしておくと dev の時便利) • plugins にいれるとき ssr: false にしないでね (サーバー内で store の中身見たいのに実行しないって指定するなんて… • mode = SPA の時はなんも気にしないでOK. local-storage でも OK だし ssr: false も要らない。
結論 • universal の時は cookie storage つかえ • spa の時は
localstorage で OK. ssr: false は要らない