===== 09.emailとpasswordでパスワード制限 =====
CodeSandbox上で、Vue.jsとFirebaseを用いて、EmailとPasswordによるパスワード制限機能のあるホームページを作りたいと思います。
===== 方針をたてる =====
今回作成するGoogle認証アプリは、
-トップページに、「Emailとパスワードでログイン」フォームを表示
-Emailとと初期パスワードは、あらかじめ、管理者がFirebase上に登録しておく。
-ログインしたら、ログイン成功画面に移動
-ログイン後の画面に、ログアウトボタンを表示
となります。
-emailとパスワードは『Firebase』という場所に保存
するものとします。
今回は、以下の3つのソースコードを利用させていただこうと思います。
-https://qiita.com/sin_tanaka/items/ea149a33bd9e4b388241
-https://www.tohuandkonsome.site/entry/2018/11/19/182438#Eメールとパスワードでユーザー管理する
-[[https://amzn.to/2EJyMuw|改訂新版 Vue.jsとFirebaseで作るミニWebサービス]]
ソースコード
https://codesandbox.io/s/6xzm6wr2k3
作ったもの
==== 0.用意するもの(開発環境) ====
パソコン
Chrome(くろーむ、WEBブラウザの一つ)
GitHubアカウント作成済み(無料)
Googleアカウント作成済み(無料)
パソコンは、Windowsパソコンでも、Macでも、かまいませんが、私の場合はWindows 8.1 Proとなります。
今回利用するもの
CodeSandbox
Firebase
Vue 2.5.2
Vuetify
==== 1.Firebaseで新規プロジェクト(新しいサーバ)を作成 ====
*https://console.firebase.google.com にGoogleアカウントでログインし、新規プロジェクト作成
{{:08.googleアカウントでのログイン機能:pasted:20181216-124725.png}}
*今回は、「firebase-email-auth」という名前で新規プロジェクトを作成しました。
{{:09.emailとpasswordでパスワード制限:pasted:20181219-164456.png}}
*測定管理者間のデータ保護条項と規約の左側のチェックボックスをONにして、右下の「プロジェクトを作成」をクリック。
{{:08.googleアカウントでのログイン機能:pasted:20181216-125023.png}}
*少し待つと、「新しいプロジェクトの準備ができました」と表示されるので、次へ をクリック。
{{:08.googleアカウントでのログイン機能:pasted:20181216-125148.png}}
*以下のようなプロジェクトトップ画面になるので、下図のように、「>」をクリック。
{{:08.googleアカウントでのログイン機能:pasted:20181216-125305.png}}
*「ウェブアプリにFirebaseを追加」の画面が出てくるので、グレーで表示された部分の中身をメモ帳などにコピーしておきます。これは、後で、CodeSandboxで、ペーストします。
{{:08.googleアカウントでのログイン機能:pasted:20181216-125734.png}}
*プロジェクトトップ画面で、画面左側の列の「開発」をクリック
{{:08.googleアカウントでのログイン機能:pasted:20181216-130117.png}}
*Authentication をクリック
{{:08.googleアカウントでのログイン機能:pasted:20181216-130030.png}}
*ログイン方法 をクリック
{{:08.googleアカウントでのログイン機能:pasted:20181216-130219.png}}
*メール/パスワード をクリック
{{:09.emailとpasswordでパスワード制限:pasted:20181219-165926.png}}
*「有効にする」をON(青色)にして、保存 をクリック
{{:09.emailとpasswordでパスワード制限:pasted:20181219-170145.png}}
*以下のような状態になっています。
{{:09.emailとpasswordでパスワード制限:pasted:20181219-170249.png}}
==== 2.Firebaseにログイン用メールアドレスとパスワードを入力 ====
今回は、
email: user@example.com
パスワード: 111111
の人にログインできるようにしたいと思います。
*Firebaseアプリの、「開発」>「Authentication」>「ユーザー」で、「ユーザーを追加」をクリック
{{:09.emailとpasswordでパスワード制限:pasted:20181219-171035.png}}
*emailとパスワードを、以下のように入力して、「ユーザーを追加」をクリック
{{:09.emailとpasswordでパスワード制限:pasted:20181219-171226.png}}
*以下のような感じになります。
{{:09.emailとpasswordでパスワード制限:pasted:20181219-171408.png}}
==== 3. CodeSandboxでVue.jsアプリを作成 ====
*https://codesandbox.io/へ行き、画面右上の、『Create Sandbox』をクリック
{{:09.emailとpasswordでパスワード制限:pasted:20181219-171907.png}}
*Vue をクリック
{{:09.emailとpasswordでパスワード制限:pasted:20181219-171955.png}}
*以下のような画面になります。
{{:09.emailとpasswordでパスワード制限:pasted:20181219-172514.png}}
==== 4. Vuetifyのインストールとindex.htmlの編集 ====
*CSSフレームワークとして、Vuetifyを用いるために、以下のように、Add Dependencyをクリック
{{:09.emailとpasswordでパスワード制限:pasted:20181219-173748.png}}
*Vuetify と入力して、Vuetifyをクリックして、インストール
{{:09.emailとpasswordでパスワード制限:pasted:20181219-173833.png}}
*以下のようになります
{{:09.emailとpasswordでパスワード制限:pasted:20181219-173914.png}}
*次に、vuetifyとfirebaseを利用できるようにするために、index.htmlとsrc/main.jsを編集します。
この時点では、特に外見に変化はありません。
{{:09.emailとpasswordでパスワード制限:pasted:20181220-211018.png}}
==== 5. src/components/Home.vueとSecret.vueの作成 ====
*src/components/Home.vue と、src/components/Secret.vue を新規作成
{{:09.emailとpasswordでパスワード制限:pasted:20181220-230523.png}}
{{:09.emailとpasswordでパスワード制限:pasted:20181220-232040.png}}
==== 6. src/App.vueの編集 ====
src/App.vueを以下のように変更して、「ヘッダーとフッター」と、中身としてHome.vueを表示します。
(変更前)
{{:09.emailとpasswordでパスワード制限:pasted:20181221-000801.png}}
(変更後)
{{:09.emailとpasswordでパスワード制限:pasted:20181221-000645.png}}
ログインしていないので、Home.vueのログイン画面が表示されます。
==== 7. Emailログインの実装 ====
Googleログインより、Email-Passwordログインの方が、難しい。
参考:https://qiita.com/sin_tanaka/items/ea149a33bd9e4b388241
src/components/Home.vueを編集
先に、内のbuttonのところを変更します。
v-text-fieldのところに、それぞれ、v-model="username"と、v-model="password"を追加します。
また、v-btnのところに、@click="emailLogin"を追加します。
(変更前1)
Login
(変更後1)
Login
次に、のところにdata()関数と、emailLogin()関数を定義。
(変更前2)
data: function () {
return {}
},
(変更後2)
data() {
return {
username: "",
password: ""
};
},
methods: {
emailLogin: function() {
firebase
.auth()
.signInWithEmailAndPassword(this.username, this.password)
.then(
user => {
alert("Success!");
this.$router.push("/");
},
err => {
alert(err.message);
}
);
}
}
この時点で、user@example.com, 111111 と入力してLoginボタンをクリックすると、Success!というアラートが表示される。
{{:09.emailとpasswordでパスワード制限:pasted:20181222-105302.png}}
==== 8. ログイン状態のチェック ====
サイト上でログイン状態をチェックします。
App.vue内でログイン状態をチェックして、isLoginに格納します。
src/App.vueの内に、data関数の後ろに、created関数を定義します。created関数は、Vue.jsがそのcomponentを作成したタイミングで実行されるとのことです。
created: function() {
firebase.auth().onAuthStateChanged(user => {
console.log(user);
if (user) {
this.isLogin = true;
} else {
this.isLogin = false;
}
});
},
(変更前)
{{:09.emailとpasswordでパスワード制限:pasted:20181222-110527.png}}
(変更後)
{{:09.emailとpasswordでパスワード制限:pasted:20181222-110842.png}}
先ほど、ログインしていますので、上記コード変更により、Secret.vueコンポーネントが表示されるようになりました。
==== 9. コンポーネント間の情報の受け渡しとログアウトボタン ====
src/App.vueがFirebaseから受け取ったユーザー情報userを、src/components/Secret.vueに渡して、Secret.vue上で表示します。
src/App.vueののの部分に、user="userData"を追加します。
また、