Railsから、Frontend分離する際の認証
既存Applicationについて
all Railsの場合、railsがいい感じに認証している。
deviseというライブラリが利用されていること多い。
認証
メアド、パスワード認証
メールアドレスの存在確認
SNS各種サービスアカウントを利用した認証
APIのためのトークン認証
新規Applicationについて
前提
ログインしている状態
疑問
詳細: あるブラウザのアクセスがログイン済みであることを判別する。
考えるべきこと
何ログインに対応するか
メール&パスワード認証
SNSログイン
ユーザー情報は何が持ち、ユーザー識別のためのトークンはどこが発行するのか
詳細な仕組み分かってない。間違っているかも。
Client(key)→Next.js Server→RailsServer(該当Keyが問題ないか確認)→Next.js Server →Client
※Next.js Serverから、Databaseに直接アクセスして確認出来るが、役割がおかしくなるのでやらない。
Next.js ServerでFetchしたいので、第一候補
Server側でAPI叩く時に詰む?
疑問
メアド認証とSNS認証の違い。
並列でNext.jsServerがある時、複数Serverのうちの、1つだけで認証がされたことになっって、他のServer上では再度認証必要になったりしない? 仮にできる場合はメリデメも言語化したい。
読んだ
こわいよね。
特に認証について考えるときの観点が分かりやすかった。
あまり分かっていなかったことが大体分かった印象。
分かりやすい。おすすめ。
具体的な期間などわかりやすい。
思考
認証、認可するAPIなどを提供し行うのは、1つのBackend
複数台スケーリングすることは全然ある。
複数のサービス(FE app)がある。
その場合、Client側でAPIを叩かなくて良い。
その場合、Client側から行うことによるデメリットはいくつか軽減できるとする。
複数台スケーリングすることは全然ある。
FEにおいては、一貫したログイン、ログアウト体験がほしい。
一部のサイトをリアーキテクトする場合、同じような体験であってほしい。
各FE Appで、会員機能がある箇所を非ログインユーザーが実行しようとした場合、Sign-in/Sign-upできるPopupなどで、同じような体験ができ、ログイン状態は共通して欲しい。
段階的にできないのか?
0. 新アプリケーションではログイン状態を利用できない。
体験
単ログインに関する情報やユーザー情報は極力無い、見せない。
実現にあたり
ベースのアプリケーションの用意
ログインに関する情報やユーザー情報の文言は工夫する。
1. 新アプリケーションに、ログイン状態は共有できるが、ログイン/会員登録を行う際は、旧アプリケーションで行ってもらう。
イメージ
1. 新アプリケーションにて、ログインが必要な機能を利用しようとする。
2. ログイン/会員登録してねPopup出す。
ログインページ or 会員登録ページのリンクを出す。
3. 旧アプリケーションの、ログインページ or 会員登録ページで認証
4. 新アプリケーションの遷移元に、リダイレクト
実現にあたり
旧アプリケーションで、redirectさせる仕組みが必要。
同じドメイン以下の別path(別アプリケーション)で、状態を共有できる必要がある。
ユーザー情報取得API
ヘッダーなどに、ユーザー情報を表示することを想定。
2. 新アプリケーションで、ログイン/会員登録を行え、その状態を旧/その他アプリケーションに共有できる。