はじめに
Firebaseの匿名認証については下の記事を参考に。
Firebase 匿名認証でログインしたユーザーか判別する方法
この記事ではFirebase 匿名認証でログインしたユーザーを永続的にログイン状態にする方法を記録する。
環境
・Ioincで開発したモバイルアプリ
・Angularとangularfire
・シミュレーターと実機でテスト
Firebase 匿名認証の永続性
Firebase JS SDK を使用すれば、認証状態をどの程度維持するかを指定できます。たとえば、ログインしたユーザーが明示的にログアウトするまで無期限に維持したり、ウィンドウを閉じたときやページをリロードしたときにクリアしたりできます。
「永続性」ってなんか難しい言葉使ってるけど、ログイン状態がどの程度保持されるか、と同じ意味で問題ないかと。
Firebaseの匿名認証では、何も設定していないといつ認証状態が消えるのか(僕には)わかりません。。
ブラウザでの感覚は1日経ってまた匿名認証でログインすると、新しい匿名アカウントになってた。1日以内なら、何度も匿名認証でログインしても同一の匿名アカウントだった。
setPersistence
で永続性を変更できる
import * as firebase from 'firebase/app';
import { AngularFireAuth } from '@angular/fire/auth';
import { NativeStorage } from '@ionic-native/native-storage/ngx';
import { Router } from '@angular/router';
@Injectable({
providedIn: 'root'
})
export class AuthService {
anoUser = null;
constructor(
private afAuth: AngularFireAuth,
private nativeStorage: NativeStorage,
private router: Router,
) {
}
anonLogin() {
this.afAuth.auth.signInAnonymously().then((res) => {
this.anoUser = res.user;
console.log('匿名認証した。uidはこちら ' + this.anoUser.uid);
// Persistence.LOCALで永続的にログイン状態にする
this.afAuth.auth.setPersistence(firebase.auth.Auth.Persistence.LOCAL);
this.nativeStorage.setItem('user_data', {
uid: res.user.uid,
});
this.router.navigateByUrl('/home');
});
}
}
import { Component, OnInit } from '@angular/core';
import { AuthService } from './auth.service';
@Component({
selector: 'app-signup',
templateUrl: './signup.page.html',
styleUrls: ['./signup.page.scss']
})
export class SignupPage implements OnInit {
constructor(
private authService: AuthService,
) {
}
ngOnInit() {}
anonLogin() {
this.authService.anonLogin();
}
}
Persistence.LOCAL
で永続的にログイン状態にできるようなので、僕はこちらを使用。
ブラウザ ウィンドウを閉じたり React Native でアクティビティが破棄されたりした場合でも、状態が維持されることを示します。 この状態をクリアするには、明示的なログアウトが必要です。Firebase Auth のウェブ セッションは単一のホストを生成元とするため、単一のドメインでのみ永続化されることに注意してください。
Webアプリなんかの場合はPersistence.SESSION
を使っても良いかも。
最後に
なんかよくわからんが、正常に匿名認証のログインが無期限に維持されてるっぽいので、、、