paiza times

paizaがお届けする、テック・キャリア・マネジメント領域における「今必要な情報」を届けるWebメディア

logo

paizaがお届けする、テック・キャリア・マネジメント領域の「今必要な情報」を届けるWebメディア

Web開発が捗るFirebase入門!JavaScriptで「Webユーザー認証」機能を超お手軽に作るチュートリアル大公開!

f:id:paiza:20161003115559j:plain
どうも、まさとらん(@0310lan)です。

今回は、Webサービスなどを開発する際に、ユーザーの管理や識別などで必要になる「ユーザー認証」機能を、できるだけシンプルに作ってみたいと思います。


利用するのは、さまざまなバックエンド機能を提供するGoogleのFirebase 】です!
f:id:paiza:20161003115754j:plain

非常に多機能なサービスですが扱いはとてもシンプルで、簡単なコードを覚えてしまえば誰でも活用できるはずです!

自分でサーバーを用意する必要もなく基本的な機能は無料で使えるので今すぐ始められるのも特徴と言えるでしょう。

■始め方!

今回は、「メールアドレス」と「パスワード」でログインする一般的な「ユーザー認証」ページの作成に挑戦してみましょう!


そこで、まずはFirebaseにアクセスして新規にプロジェクトを作成します。
f:id:paiza:20161003115833j:plain


好きな「➀プロジェクト名」と、自分の「➁国名」を指定します。
f:id:paiza:20161003115853j:plain


すると、プロジェクト専用の「ダッシュボード」が表示されます!
f:id:paiza:20161003115922j:plain
「ユーザー認証設定」も含めて、多彩な機能をこの画面から管理することが可能になるわけです。


それでは、「認証機能」を設定しましょう!

方法は簡単で、まずは左メニューの「➀Auth」を選び、ログイン方法の「➁メール/パスワード」の項目を選択します。
f:id:paiza:20161003115939j:plain


あとは、「有効にする」にチェックを入れるだけでOKです!
f:id:paiza:20161003122815j:plain
たったこれだけで、Firebase側の設定はひとまず完了です!


あとは、コードを書いていくだけなのですが、その前に画面右上の「ウェブ設定」をクリックしてみてください。
f:id:paiza:20161003120740j:plain


すると、Firebaseの専用ライブラリ「firebase.js」のリンクと、初期化設定用の「config」が表示されるのでコピーしておきましょう。
f:id:paiza:20161003120750j:plain
これらの内容は、あとでプログラミングする時に必要となるので、忘れないように確認しておいてください!

■必要なファイルを準備しよう!

それでは、Firebaseを使った「ユーザー認証」プログラミングに挑戦していきましょう!


今回作るのは、最低限の機能を備えたシンプルな「認証ページ」を想定しています。
f:id:paiza:20161003120814j:plain
必要なファイルとして、HTMLを記述する「index.html」と、認証機能を記述する「app.js」をこれから作成していきます。


まずは、シンプルな「画面UI」をサクッと作りましょう!

<!-- index.html -->


<div id="input-area">


    <input id="email" type="email" placeholder="メールアドレスを入力" required/>
    <input id="password" type="password" placeholder="パスワードを入力" required/>
    <button id="login">ログイン</button>
    <button id="newuser">新規登録</button>


</div>
<button id="logout" class="hide">ログアウト</button>

「inputタグ」と「buttonタグ」で単純に作っていますが、もちろん「formタグ」を使っても問題ありません。

また、「ログアウト」用のボタンは、初回時に見えないようにCSSで隠しておくのが良いでしょう。


最後に、「bodyタグ」の最下段に先ほどコピーしておいた「firebase.js」と、これから作る「app.js」を読み込むように記述しておきます。

<script src="https://www.gstatic.com/firebasejs/3.4.1/firebase.js"></script>
<script src="app.js"></script>

これで、「index.html」をブラウザで開くと「認証ページ」が表示されるかと思います。
(「index.html」のソースコードはコチラから確認できます…)


そして、肝心の「app.js」ですが、まずはコピーしておいた初期化用の「config」を貼り付けておきましょう。

// app.js


//Firebase初期設定
var config = {
  apiKey: "【apiKey】",
  authDomain: "【Domain】",
  databaseURL: "【URL】",
  storageBucket: "【Bucket】",
  messagingSenderId: "【ID】"
};
firebase.initializeApp(config);

これで、自分の「Firebaseプロジェクト」の初期化が完了し、利用可能な状態になっています。

あとは、「ユーザー認証」に必要な機能を実装するため、どんどんコードを追加していけばOK!

■「ユーザー認証」に必要な機能の実装!

今回作る「ユーザー認証」ページでは、以下4つの機能は最低限欲しいところでしょう。

1,新しいユーザーを登録する「新規登録」ボタン
2,既存のユーザーが「ログイン」できるボタン
3,「ログアウト」ボタン
4,現在の「認証」状態を監視する機能

これらをゼロから作るのは非常に大変ですが、Firebaseには上記4つの機能を簡単なコードで実現できるAPIが提供されています。


まず、「新規登録」「ログイン」機能を実現するのは簡単で、それぞれ1行のコードを書くだけというお手軽さです!

// 新規ユーザーの登録機能
firebase.auth().createUserWithEmailAndPassword(email, password)


// 既存ユーザーのログイン機能
firebase.auth().signInWithEmailAndPassword(email, password)

引数には、フォームから取得した「メールアドレス」と「パスワード」をそのまま代入してあげればOKです。


例えば、新規登録ボタンを実装するなら、ボタンがクリックされたタイミングで「メールアドレス」と「パスワード」を取得し、先ほどのコードに代入するだけでシンプルに実装できるでしょう。

// ボタンがクリックされた時の処理
button.addEventListener('click', function(e) {


    // メールアドレス・パスワードを取得
    var email = document.getElementById('email').value;
    var password = document.getElementById('password').value;
  
    // 新規ユーザーを登録
    firebase.auth().createUserWithEmailAndPassword(email, password)


});


上記コードを「新規登録」ボタンに実装し、実際に「メールアドレス」と「パスワード」を入力してボタンをクリックしてみましょう。
f:id:paiza:20161003121213j:plain


すると、Firebaseのダッシュボードから、見事に「新規ユーザー」が登録されているのが分かります!
f:id:paiza:20161003121223j:plain
登録が済んだら、次回からは「ログイン」による認証が可能になっています。


ちなみに、登録が済んでいないのに「ログイン」しようとしたり、同じメールアドレスで「新規登録」した時などは「エラー」が発生しますが、「catch()」を追加することで処理を分岐させることも出来ます。

// 登録に失敗した時の処理
firebase.auth().createUserWithEmailAndPassword(email, password)
.catch(function(error) {


    alert('登録できません(' + error.message + ')');


});


あと必要な機能として、現在のユーザーが「ログイン状態」なのか「ログアウト状態」なのかも把握しておかなければいけません。

これをFirebaseでは、以下のコードを書くだけで最適なタイミングで監視してくれるようになります。

firebase.auth().onAuthStateChanged()


実際には、IF文などで処理を分岐させるようになるでしょう。

// 認証状態の確認
firebase.auth().onAuthStateChanged(function(user) {
    if(user) {
    
        // ログイン状態の処理
    
    }
    else {
    
        // ログアウト状態の処理
    
    }
});

ユーザーが「新規登録」や「ログイン・ログアウト」をすれば、自動的にユーザーの状態を把握し処理を分岐してくれるので便利です。

ログイン後に、ユーザーのデータを読みこんだり、別画面に遷移させたりなどいろいろ活用できると思います。


最後に、「ログアウト」機能の実装ですが、これは非常に簡単で次の1行を書くだけで実現します。

firebase.auth().signOut();

これを「ログアウト」ボタンに実装すれば、最低限の機能を搭載した「ユーザー認証」ページの完成です!


今回のサンプルデモ「ユーザー認証ページ」の全ソースコードは、コチラから確認することが出来ます!

(CSSに関しては、超軽量フレームワークのmilligram.cssを使用しています…)

paizaについて

f:id:paiza:20150730172136p:plain
paizaでは、プログラミングスキルチェック問題を多数ご用意いたしております。もちろん今回使用しているJavaScriptにも対応しておりますので、「JavaScriptでプログラミング問題を解いてみたい」「自分のスキルを試してみたい」という方にもピッタリです!

paizaでプログラミング問題を解くと、結果によりS・A・B・C・D・Eの6段階で自分のスキルのランクが分かります。問題はレベルごとに分かれており、初心者から上級者の方まで挑戦していただけますので、自分のプログラミングスキルを客観的に知りたいという方は是非チャレンジしてみてください!!

プログラミング問題による学習コンテンツ(paiza Learning)もございますので、「まったくのプログラミング未経験者です」「初心者なのでプログラミング学習から始めたいな」という方もぜひご利用ください。

さらに、paizaが運営する無料オンラインプログラミング実行環境サービス「paiza.IO (パイザ・アイオー)では、JavaScriptはもちろん、多数プログラミング言語のプログラミングが面倒な環境構築なしに無料でできますのでぜひご利用ください!

■まとめ

今回は、Firebaseが持つ便利な「ユーザー認証」機能の一部をご紹介しました。

実は、もっと多彩な機能が用意されているのですが、いずれにしても今回の基本的な内容がベースになっているので、まずは自分でサンプルデモと同じページが作れるようになってから次のステップアップを目指すと良いでしょう。


また、FirebaseではTwitterやFacebookなどで認証できる「SNS認証」や、メールアドレスの検証をサポートする機能や、Webページをそのままホスティングしたりデータベースを利用したりも可能なので、ご興味ある方はぜひこれらの機能も活用してみてください!


<参考>
「Firebase」公式サイト

Web版「ユーザー認証」公式ドキュメント




paizaは、技術を追い続けることが仕事につながり、スキルのある人がきちんと評価される場を作ることで、日本のITエンジニアの地位向上を目指したいと考えています。

自分のスキルを磨いていきたいと考えている方におすすめなのが「paizaラーニング」。オンラインでプログラミングしながらスキルアップできる入門学習コンテンツです。初心者でも楽しくプログラミングの基本を学ぶことができます。

paizaラーニング

そして、paizaでは、Webサービス開発企業などで求められるコーディング力や、テストケースを想定する力などが問われるプログラミングスキルチェック問題も提供しています。

paizaのスキルチェック

スキルチェックに挑戦した人は、その結果によってS・A・B・C・D・Eの6段階のランクを取得できます。必要なスキルランクを取得すれば、書類選考なしで企業の求人に応募することも可能です。「自分のプログラミングスキルを客観的に知りたい」「スキルを使って転職したい」という方は、ぜひチャレンジしてみてください。

paizaのおすすめコンテンツ

PPG proken プログラミングゲーム「初恋 プログラミング研究会〜海に行こうよ〜」 PPG Bingo プログラミングゲーム「コードレビューBINGO!!」
paiza転職 paiza新卒 EN:TRY paizaラーニング 記事内に記載している情報は、記事公開時点でのものとなります。 Copyright Paiza, Inc, All rights reserved.