Skip to content
This repository was archived by the owner on Jul 10, 2019. It is now read-only.

Commit e604304

Browse files
committed
🍣 docs: add nuxt login markdown
1 parent f399a25 commit e604304

File tree

2 files changed

+106
-0
lines changed

2 files changed

+106
-0
lines changed
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
# Nuxt.js のログイン処理で Cookie を使わない場合の考察
2+
3+
## 記事かきましたー!
4+
5+
[Nuxt.jsでログインをどうやるか、そしてCookieからlocalStorageへ - DJ lemon-Sour's diary (prod.hisasann)](https://hisasann.github.io/2019/06/22/how-to-login-with-nuxt-and-cookie-to-localstorage/)
6+
7+
## 現状
8+
9+
* Nuxt の middleware は SSR 時はサーバーサイドで一度実行され、 CSR 時にもそれぞれ実行されるが、 Cookie を使わない場合、 SSR 時にログイン状態か判断つかないので、ログイン画面へのリダイレクトができない、つまり 302 を返せない
10+
11+
* さらに仮にフロントエンド側でログイン状態を確認しつつ、非ログインの場合にログイン必須画面を表示したときにログイン画面に遷移するとしても、一瞬でもログイン必須画面が見えてしまう
12+
13+
* Nuxt の middleware を使わない場合、 Nuxt のアーキテクチャの割とメイン機能が使えないことになってしまう
14+
15+
## ではどうするか
16+
17+
1. Nuxt の middleware をガチで使わない方向でいく(工数と難易度や汎用性含めなかなか厳しい)
18+
19+
1. Cookie 7 日問題のことは忘れる(iPhone の Safari にも影響あるので忘れにくいことではある)
20+
21+
1. JavaScript から Cookie をセットせずに、専用の API を用意して Set-Cookie させる(検証が必要)
22+
23+
## 参考記事
24+
25+
[ITP2.1対策 Safari 12.1 でCookieの有効期限を8日以上に延長する方法 - Qiita](https://qiita.com/yossaito/items/6ffb1b8bb3f9d91107b8)
26+
27+
[【一問一答】Appleの「 ITP2.2 」とは?:ファーストパーティクッキーを24時間で消去 - ライブドアニュース](https://news.livedoor.com/article/detail/16456042/)
Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
# Nuxt.jsを使ったログイン周りの仕組みについて
2+
3+
## ログイン状態でブラウザでリロードした場合(SSR)
4+
5+
リクエスト時 `ブラウザ → SSR サーバ → API サーバ` と経由する
6+
7+
`ブラウザ → SSR サーバ 間` は、 `cookie``token` を渡します
8+
9+
`SSR サーバ → API サーバ 間` は、 `リクエストヘッダ``token` を付与して渡します
10+
11+
レスポンス時 `ブラウザ ← SSR サーバ ← API サーバ` と経由する
12+
13+
`SSR サーバ ← API サーバ 間` は、 `レスポンスヘッダ``token` を付与して返します
14+
15+
`ブラウザ ← SSR サーバ 間` は、 vuex の state 経由で `token` を返します
16+
17+
具体的には SSR サーバーサイドの `nuxtServerInit` イベントでログインチェック処理を dispatch し、 state に保存します
18+
19+
次にフロント側の `nuxtClientInit` イベントで、 state の値を元に `cookie``token` を設定します
20+
21+
22+
## 未ログイン状態でブラウザでリロードした場合(SSR)
23+
24+
リクエスト時 `ブラウザ → SSR サーバ → API サーバ` と経由する
25+
26+
`ブラウザ → SSR サーバ 間` は、 `cookie``token` がないので渡せません
27+
28+
`SSR サーバ → API サーバ 間` は、 `リクエストヘッダ``token` がない状態で渡します
29+
30+
レスポンス時 `ブラウザ ← SSR サーバ ← API サーバ` と経由する
31+
32+
`SSR サーバ ← API サーバ 間` は、 `レスポンスヘッダ``token` を付与しません
33+
34+
`ブラウザ ← SSR サーバ 間` は、 vuex の state に `token` がないので、 `cookie` から `token` を削除します
35+
36+
37+
## 未ログイン状態でブラウザでログイン必須画面を開いた場合(SSR)
38+
39+
ベースの挙動は `未ログイン状態でブラウザでリロードした場合(SSR)` と同じですが、その後、authenticated ミドルウェアによりログイン必須画面に未ログイン状態で遷移したので、サインイン画面にリダイレクトします
40+
41+
42+
## ログイン状態でブラウザで SPA した場合(CSR)
43+
44+
リクエスト時 `ブラウザ → API サーバ` と経由する
45+
46+
`ブラウザ → API サーバ 間` は、 `リクエストヘッダ``cookie` から取得した `token` を付与して渡します
47+
48+
レスポンス時 `ブラウザ ← API サーバ` と経由する
49+
50+
`ブラウザ ← API サーバ 間` は、 `レスポンスヘッダ``token` を付与して返します
51+
52+
そのまま `token``cookie` に保存します
53+
54+
55+
## 未ログイン状態でブラウザで SPA した場合(CSR)
56+
57+
リクエスト時 `ブラウザ → API サーバ` と経由する
58+
59+
`ブラウザ → API サーバ 間` は、 `cookie``token` がないので `リクエストヘッダ``token` がない状態で渡します
60+
61+
レスポンス時 `ブラウザ ← API サーバ` と経由する
62+
63+
`SSR サーバ ← API サーバ 間` は、 `レスポンスヘッダ``token` を付与せず、 vuex の state に `token` がないので、 `cookie` から `token` を削除します
64+
65+
66+
## 未ログイン状態でブラウザでログイン必須画面を SPA で開いた場合(ログアウト画面)
67+
68+
ベースの挙動は `未ログイン状態でブラウザで SPA した場合(CSR)` と同じですが、その後、authenticated ミドルウェアによりログイン必須画面に未ログイン状態で遷移したので、サインイン画面にリダイレクトします
69+
70+
71+
## すでにログインしていたら別の画面にリダイレクトしたい場合(ログイン画面)
72+
73+
anonymous ミドルウェアが「すでにログインしていたらトップにリダイレクトする」を担う
74+
75+
## ログイン状態からログアウトするときの挙動
76+
77+
`リクエストヘッダ``token` がない状態でリクエストします
78+
79+
`cookie` から `token` を削除します

0 commit comments

Comments
 (0)