★前回の記事
Viewの実装
ログイン機能のviewを作成します。未ログイン時にはGoogleアカウントでログイン
ボタンを表示し、ログイン時には名前とログアウトボタンを表示します。
src/components/Login.js
import React from 'react' import { connect } from 'react-redux' import PropTypes from 'prop-types' import { isLoaded, isEmpty } from 'react-redux-firebase' import { loginWithGoogle, logout } from '../actions/authActions' let Login = ({ auth, loginWithGoogle, logout }) => { if (!isLoaded(auth)) { // #4 return (<div>ログイン中...</div>); } if (isEmpty(auth)) { // #5 return ( <button onClick={loginWithGoogle}>Googleアカウントでログイン</button> ) } return ( <div> {auth.displayName} さん {/* #6 */} <button onClick={logout}>ログアウト</button> {/* #7 */} </div> ); } Login.propTypes = { auth: PropTypes.object.isRequired, loginWithGoogle: PropTypes.func.isRequired, logout: PropTypes.func.isRequired } const mapStateToProps = state => ( { auth: state.firebase.auth } // #1 ) const mapDispatchToProps = dispatch => { return { loginWithGoogle: () => dispatch(loginWithGoogle()), // #2 logout: () => {dispatch(logout()) // #3 } } } Login = connect( mapStateToProps, mapDispatchToProps )(Login) export default Login;
- 認証情報は、
state.firebase.auth
で取得できます(#1)。auth
というプロパティ名でviewに渡します。 - ログイン関連のfunctionをviewに渡します(#2, #3)。
- 認証情報の読み込み中は、
isLoaded(auth)
がfalse
になるので、その間は読み込み中である旨を表示します(#4)。 - ログアウトしている場合は、
isEmpty(auth)
がtrue
になるので、ログインボタンを表示します(#5)。 - ログインしている場合は、ユーザ名(#6)とログアウトボタン(#7)を表示します。
動作確認
ログイン、ログアウトの機能ができたので、動作確認します。
ログアウト状態です。
Googleでログイン
ボタンを押すと、画面が切り替わり、アカウント選択画面になります。
アカウントを選択すると、元の画面に戻り、少しの間ログイン中...
と表示されます。
読み込みが終わると、ログイン名とログアウトボタンが表示されます。
ログアウトを押すと、ログインボタンが表示されます。
Firebaseのデータも確認しておきましょう、
Firebase Console > Authentication > ユーザ
に、ログインしたことのあるユーザ一覧が表示されます。
Database
のデータタブで、/user
パスにユーザの情報が格納されていることが確認できます。
以上で認証機能の作成は完了です。
★次回の記事
★目次