見出し画像

firebaseを使ったログイン機能

おはようございます。firebaseを使ったログイン機能にはこんなにもやることがありそうです。

ログイン認証がSPA上でどう実現されるか理解する
セットアップ
ユーザー登録の機能実装
ユーザーログインの機能を実装
トークンがないとアクセスできないようにする
プロジェクト全体でVuexを使用して使えるようにする
トークンをヘッダーにつけてリクエストを送る。
ログイン状態に応じてリダイレクトをする処理を実装する
ログイン状態に応じてナビゲーションバーの内容変更
トークンの有効期限が切れても動くような処理を実装する
自動ログインの処理を実装する
ログアウトの実装

わからない用語

トークン、SPA、Router、SDK、rest API、dispatch

わかった内容

トークン、

SPA、シングルページアプリケーション

Router、

SDK、

rest API、

dispatch


ログイン認証がSPA上でどう実現されるか理解する

VueRouterはURLとVueアプリをつなげるもの。
なぜ、認証が必要か。アカウント作るだけなら、ユーザーを作ればいい。勝手にデータを見られたり、書かれたりするのを防ぐため。twitterはポストリクエスト。axiosでサーバーに送れば、ツイートはできる。非公開データとかもgetリクエストで見ることができてしまう。

私は本人です。自分のアカウントに入力します。とサーバーにわかってもらう仕組みが認証。

どのように自分ですとサーバーに伝えられるかが必要となる。

サーバーにユーザー名、パスワードを送るとサーバーからトークンをもらう。

トークンは、jsonのデータがたくさん入っている。符号になっている長い文字列。改ざんしていたら、バレるもの。ブラウザlocalStorageにトークンを永続的に保存。

本人しか持っていない、トークンだから、本人だねと認証する。

他の人が書き換えていたら、ダメ。と返されるため、期間が短くなっている。firebase authenticationは1時間で切れるようになっている。

トークンを持っている人にしか、見せられないとかはサーバーが決めること。



セットアップ

見た目の設定
Firebase Authenticationのセットアップ、ログイン方法の有効選択

ユーザー登録(Register)の機能実装

SDKがある。rest APIを使う。firebase auth rest apiで調べる。sign up with emaiでそれに従って、設定する。

main js のaxiosのインスタンスbaseURLの変更。

firebaseのウェブAPIキーを使って、registerメソッドの設定をする。

axios.post('key',{データ内容})
.then

パスワードは6文字以上。

data内のidtokenを確認する

ユーザーログインの機能を実装

sign in with emailでendpoint確認。

登録のScriptとほとんど同じ。

送信後、入力ワードを空白にするようにする。

firebase authenticationでは、ユーザー、名前、写真のURL、メール、パスワード以外情報がない。

ユーザーの情報をデータで管理したいときは、cloud firestoreでさらにデータベースを作成する。

トークンがないとアクセスできないようにする

掲示板の内容をトークンがないと見れないようにする。

ルールを変更する。

allow read, write: if request.auth.uid ! = null;

有効期限のあるトークンがあればOKというルール

なければ、エラーが出るようにする。

idトークンをヘッダーなどに貼り付ける

vuexインストール。store、index.jsのファイル設定。

storeの設定をする。

state:{idToken:null},
mutations:{updataIdToken(state, idToken) {state.idToken =idToken ;},
actions: {login({ commit },authData) {axios.post内容}

dispatch('login', {データ})


プロジェクト全体でVuexを使用して使えるようにする

トークンをヘッダーにつけてリクエストを送る。

Authorizationの設定をする。

ログイン状態に応じてリダイレクトをする処理を実装する

beforeEnterをroutersにかく。

idTokenがないといけない設定にする。

もし、トークンがあれば、見れる。なければログインしてください。という設定をしておく。

ログインした後に、掲示板のURLに飛ぶようにする。


ログイン状態に応じてナビゲーションバーの内容変更

認証されていなければ、掲示板が消える。v-ifで書く。

認証されていれば、掲示板のみの表示にする。


リフレッシュトークンを使って、トークンの有効期限が切れても動くような処理を実装する

有効期限が1時間のみ、越えるとエラーになってしまう。

1時間経ったら、強制的にログアウトする仕組み。

もしくは、トークンの更新をする。

リフレッシュトークンを活用する。

再帰的な処理をするために関数として設定する


自動ログインの処理を実装する

ローカルストレージにidTokenを取っていきて入れる状態にする。

トークンの有効期限が過ぎていてら、ログイン画面に移るようにする。

そのために、有効期限が切れる値を設定しておく。

今の時間を取得して、その時間から1時間後というデータが、期限の切れる時間と設定しておく。

今の時間と比べて、その時間が後であれば、切れているということにする。

切れていなければ、更新する

ログアウトの実装

ログアウトのテキスト用意

クリックイベントでログアウトメソッドを作成

ストアからログアウトアクションをする

idTokenを消す。nullにする

ローカルストレージからもトークン情報を消す。

押したら、ログイン画面に移動する。




サポート頂けるとモチベーション上がります!僕もますます頑張るので、一緒に頑張りましょう!!