Firebase Authentication(v9)とNuxtで認証機能を実装する
はじめに
FirebaseのSDKのバージョンが9に変わって実装方法が変わったので記事を書くことにしました。
この記事を書いた人
@takasqr アプリケーション開発が大好きなエンジニア。Vue、Swift、Electrom などでアプリを作って公開している。AWS や Firebase などのクラウドサービスも好き。
構成
- Firebase Authentication(v9)
- Nuxt
- Vuetify
Vuetifyを使ってない人でもscript
の部分を見てもらえればわかると思います。
Firebase Authenticationとは?
Firebase Authenticationは、一言で言うと「ログイン機能を簡単に作ることが出来るクラウドサービス」です。
Firebaseは現在Googleによって運営されています。
できる事
Firebase上にユーザーを作って管理していくことができます。
ログイン方法は、
- メールアドレス
- Googleアカウント
- Twitterアカウント
- Microsoftアカウント
- Gitgubアカウント
- Appleアカウント
- Facebookアカウント
- 電話番号認証
- カスタム認証
- 匿名認証
と豊富にあります。
また、ユーザーに「管理者ユーザー」、「一般ユーザー」等のラベル付けすることもできます。
【Firebase】カスタムクレーム(Custom Claims)で管理者ユーザーを作る | ライトリ
料金
電話認証以外は無料で使うことができます。
メリット
FirebaseはGoogleのサービスなので、ほとんどの人にとってセキュリティは上がると思います。ほかにもFirebase Authentication公式ライブラリがあるので、自分で作るより開発工数を短縮することができます。
Nuxt.jsとは?
Nuxt.jsは一言で言うと、「Vue.jsを元にして作られた、javascriptのフレームワーク」です。
Firebaseを初期化
Firebaseを使うためには、初期化処理を行う必要があります。
pluginsディレクトリにfirebase.js
を作成し、登録します。
import { initializeApp } from 'firebase/app'
import { getAnalytics } from 'firebase/analytics'
const firebaseConfig = {
apiKey: 'AIzaSyDf9wc8MCB3H_gmvQbxsuBTo5QCadRu8tg',
authDomain: 'litely-f6e0d.firebaseapp.com',
projectId: 'litely-f6e0d',
storageBucket: 'litely-f6e0d.appspot.com',
messagingSenderId: '400014490635',
appId: '1:400014490635:web:47198f41e8f33d603e5b0e',
measurementId: 'G-9Z9X0FJZRL'
}
// Initialize Firebase
const app = initializeApp(firebaseConfig)
// eslint-disable-next-line no-unused-vars
const analytics = getAnalytics(app)
export default {
plugins: [
{ src: '~/plugins/firebase.js', mode: 'client' }
]
}
ユーザー作成
<template>
<div>
<v-btn @click="SignUp">
ユーザー作成
</v-btn>
</div>
</template>
<script>
import { getAuth, onAuthStateChanged, createUserWithEmailAndPassword } from 'firebase/auth'
export default {
data () {
return {
emailAddress: 'test@example.com',
password: 'Password',
}
},
methods: {
SignUp () {
const auth = getAuth()
createUserWithEmailAndPassword(auth, this.emailAddress, this.password)
.then((userCredential) => {
console.log('user created')
})
.catch((error) => {
alert(error.message)
console.error(error)
})
}
}
}
</script>
ログイン
<template>
<div>
<v-btn
@click="SignIn"
>
ログイン
</v-btn>
</div>
</template>
<script>
import { getAuth, signInWithEmailAndPassword } from 'firebase/auth'
export default {
methods: {
SignIn () {
try {
const auth = getAuth();
signInWithEmailAndPassword(auth, this.emailAddress, this.password)
.then((user) => {
console.log('ログイン成功')
})
.catch((error) => {
console.error(error)
})
} catch (e) {
console.error(e)
}
}
}
}
</script>
Googleアカウント
googleアカウントでログインするコードです。
<template>
<div>
<v-btn
@click="SignInGoogle"
>
Googleアカウントでログイン
</v-btn>
</div>
</template>
<script>
import { getAuth, GoogleAuthProvider, signInWithPopup } from 'firebase/auth'
export default {
data () {
return {
emailAddress: 'test@example.com',
password: 'Password',
}
},
methods: {
SignInGoogle () {
const provider = new GoogleAuthProvider()
const auth = getAuth()
signInWithPopup(auth, provider)
.then((result) => {
this.$router.push({ path: '/' })
}).catch((error) => {
console.error(error)
})
}
}
}
</script>
ログアウト
<template>
<div>
<v-btn @click="signout">
signout
</v-btn>
</div>
</template>
<script>
import { getAuth, signOut } from 'firebase/auth'
export default {
methods: {
signout () {
const auth = getAuth()
signOut(auth).then(() => {
// Sign-out successful.
alert('サインアウトしました。')
}).catch((error) => {
// An error happened.
console.error(error)
})
}
}
}
</script>
NuxtでFirestore(v9)を操作するにはこちら。