Quantcast
Channel: Node.jsタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 8902

初心者がReact+FirebaseでWebアプリを作成する③ ~Firebase Authenticationの認証機能を使ってみた~

$
0
0

②の続きです。

今回はfirebaseの認証機能を使って、ログインしたユーザーがだけが書き込みをできるようにします。

↓のGitHubのページを参考にしました。
https://github.com/firebase/firebaseui-web-react

その他参考。
https://firebase.google.com/docs/auth/web/manage-users?hl=ja
https://firebase.google.com/docs/auth/web/start?hl=ja

まずはfirebaseのAuthenticathionのログイン方法でGoogleとメール/パスワード認証を有効にしてみましょう。
TwitterなどはAPIを申請をしなければならないので無効にしています。
authentication.png

以下のnpmコマンドを実行。

npm install --save react-firebaseui
npm install --save firebase

firebase-uiがインストールできたら↓のように変数uiConfigを定義して、
StyledFirebaseAuthで呼び出すようにします。

App.js
constuiConfig={   //認証するときポップアップしますsignInFlow:'popup',   //サインインしたときのリンク先signInSuccessUrl:'/',//認証方法一覧。//Googleの部分をFacebook、Twitter等に変えれば、そのAPIが使用できますsignInOptions:[firebase.auth.GoogleAuthProvider.PROVIDER_ID,firebase.auth.EmailAuthProvider.PROVIDER_ID,]};

今回は以下のようにまとめました。
stateにisLoginを設けて、true、falseでログイン状態を管理しています。
コンポーネント化していないので散らかっていますが、後ほどまとめていきます。

App.js
importReactfrom'react';import'./App.css';importfirebasefrom"firebase/app"import"firebase/auth"import"firebase/firestore"//①でモジュール化したfirebase.jsをインポートimport{firestore}from'./plugins/firebase';importButtonfrom'@material-ui/core/Button';importTextFieldfrom'@material-ui/core/TextField';importTextareaAutosizefrom'@material-ui/core/TextareaAutosize';importStyledFirebaseAuthfrom'react-firebaseui/StyledFirebaseAuth';classAppextendsReact.Component{constructor(props){super(props);this.state={name:'',address:'',isLogin:false,}this.getName=this.getName.bind(this);this.getAddress=this.getAddress.bind(this);this.addData=this.addData.bind(this);this.logOut=this.logOut.bind(this);}//コンポーネント配置時にログインできてるか確認しますcomponentDidMount(){firebase.auth().onAuthStateChanged(user=>{this.setState({isLogin:true,});});} //名前の入力フォーム情報読み込みgetName(event){this.setState({name:event.target.value,});}; //住所の入力フォーム情報読み込みgetAddress(event){this.setState({address:event.target.value,});}; //登録ボタンを押すとデーターベースに反映addData(){firestore.collection('users').add({name:this.state.name,address:this.state.address,created_at:newDate(),}).then(()=>{this.setState({name:'',address:'',});})}; //ログアウトボタンを押すとisLoginがfalseになるlogOut(){this.setState({isLogin:false,});}render(){constuiConfig={signInFlow:'popup',signInSuccessUrl:'/',signInOptions:[firebase.auth.GoogleAuthProvider.PROVIDER_ID,firebase.auth.EmailAuthProvider.PROVIDER_ID,]};  //空の変数を定義してifでログイン/ログアウト時の表示画面を切り替えるletsuccessfulUser;if(this.state.isLogin){successfulUser=(<div><form><TextFieldlabel="名前"value={this.state.name}onChange={(event)=>{this.getName(event)}}/><br/><TextareaAutosizearia-label="住所"rowsMax={4}placeholder="住所"value={this.state.address}onChange={(event)=>{this.getAddress(event)}}/>;
<br/><Buttonvariant="contained"color="primary"onClick={this.addData}>登録</Button>
</form>
<Buttonvariant="contained"color="secondary"onClick={this.logOut}>ログアウト</Button></div>
);}else{successfulUser=(<div><p>Pleasesign-in:</p>
<StyledFirebaseAuthuiConfig={uiConfig}firebaseAuth={firebase.auth()}/>
</div>
);}return(    //最終的な表示画面<div>{successfulUser}</div>
);}}exportdefaultApp;

するとログイン画面が表示されます。
pleasesignin.png

ログインできたら②で作った投稿画面へ切り替わります。
successfuluser.png

これでログインしたユーザーだけが書き込みをできるようになりました。
ユーザー情報もちゃんと登録されています。
ユーザー認証成功.png

componentDidMountについてはReactの公式ページが一番分かりやすかったです。
ライフサイクル図が秀逸だと思います。

https://ja.reactjs.org/docs/react-component.html

それではまた投稿いたします。


Viewing all articles
Browse latest Browse all 8902

Trending Articles