Skip to content

Authentication

Taeho Kim edited this page Mar 28, 2017 · 2 revisions

Get currently signed-in user (Listener)

Get currently signed-in user by Firebasebase.AuthStateChangeListener.

It emits FirebaseAuth object on each auth state changes until unsubscribed.

Note that RxFirebaseAuth.authStateChanges() will emit initial value on subscribe.

RxJava 1.x

Java:

RxFirebaseAuth.authStateChanges(FirebaseAuth.getInstance())
        .subscribe(new Action1<FirebaseAuth>() {
            @Override
            public void call(FirebaseAuth firebaseAuth) {
                // Do something on auth state changes.
            }
        }, new Action1<Throwable>() {
            @Override
            public void call(Throwable throwable) {
                // Handle error
            }
        });

Kotlin:

FirebaseAuth.getInstance().authStateChanges()
        .subscribe({
            // Do something on auth state changes.
        }) {
            // Handle error
        }

RxJava 2.x

Java:

RxFirebaseAuth.authStateChanges(FirebaseAuth.getInstance())
        .subscribe(new Consumer<FirebaseAuth>() {
            @Override
            public void accept(FirebaseAuth firebaseAuth) {
            	// Do something on auth state changes
            }
        }, new Consumer<Throwable>() {
            @Override
            public void accept(Throwable throwable) {
                // Handle error
            }
        });	

Kotlin:

FirebaseAuth.getInstance().authStateChanges()
        .subscribe({
            // Do something on auth state changes.
        }) {
            // Handle error
        }

Get currently signed-in user (getCurrentUser())

Get currently signed-in user by FirebaseAuth.getCurrentUser().

It emits FirebaseUser object depends on user's signed-in state. It will emit nothing and completes its sequence when there is no signed-in user exists.

RxJava 1.x

Java:

RxFirebaseAuth.getCurrentUser(FirebaseAuth.getInstance())
        .subscribe(new Action1<FirebaseUser>() {
            @Override
            public void call(Optional<FirebaseUser> user) {
                // Do something with user
            }
        }, new Action1<Throwable>() {
            @Override
            public void call(Throwable throwable) {
                // Handle error
            }
        });

Kotlin:

FirebaseAuth.getInstance().rxGetCurrentUser()
        .subscribe({
            // Do something with user
        }) {
            // Handle error
        }

RxJava 2.x

It uses more specific observable (Maybe) to reflect its behavior.

Java:

RxFirebaseAuth.getCurrentUser(FirebaseAuth.getInstance())
        .subscribe(new Consumer<FirebaseUser>() {
            @Override
            public void accept(FirebaseUser firebaseUser) {
                // Do something with user
            }
        }, new Consumer<Throwable>() {
            @Override
            public void accept(Throwable throwable) {
                // Handle error
            }
        });

Kotlin:

FirebaseAuth.getInstance().rxGetCurrentUser()
        .subscribe({
            // Do something with user
        }) {
            // Handle error
        }

Sign in anonymously

Uses Anonymous Authentication for sign in. Note that it emits FirebaseUser object of currently signed-in user.

RxJava 1.x

Java:

RxFirebaseAuth.signInAnonymous(FirebaseAuth.getInstance())
        .subscribe(new Action1<FirebaseUser>() {
            @Override
            public void call(FirebaseUser user) {
                // Do something with anonymous user
            }
        }, new Action1<Throwable>() {
            @Override
            public void call(Throwable throwable) {
                // Handle error
            }
        });

Kotlin:

FirebaseAuth.getInstance().rxSignInAnonymous()
        .subscribe({
            // Do something with anonymous user
        }) {
            // Handle error
        }

RxJava 2.x

Java:

RxFirebaseAuth.signInAnonymous(FirebaseAuth.getInstance())
        .subscribe(new Consumer<FirebaseUser>() {
            @Override
            public void accept(FirebaseUser user) {
                // Do something with anonymous user
            }
        }, new Consumer<Throwable>() {
            @Override
            public void accept(Throwable throwable) {
                // Handle error
            }
        });

Kotlin:

FirebaseAuth.getInstance().rxSignInAnonymous()
        .subscribe({
            // Do something with anonymous user
        }) {
            // Handle error
        }

Update a user's profile

For a method which returns Task<Void> as a result, it is converted to Completable.

RxJava 1.x

Java:

FirebaseUser user = ...;

UserProfileChangeRequest request = new UserProfileChangeRequest.Builder()
        .setDisplayName("John Doe")
        .setPhotoUri(Uri.parse("http://my.photo/johndoe"))
        .build();

RxFirebaseUser.updateProfile(user, request)
        .subscribe(new Action0() {
            @Override
            public void call() {
            	// Update successful
            }
        }, new Action1<Throwable>() {
            @Override
            public void call(Throwable throwable) {
                // Update was not successful
            }
        });

Kotlin:

val user: FirebaseUser = ...

val request = UserProfileChangeRequest.Builder()
        .setDisplayName("John Doe")
        .setPhotoUri(Uri.parse("http://my.photo/johndoe"))
        .build()

user.rxUpdateProfile(request)
        .subscribe({
            // Update successful
        }) {
            // Update was not successful
        }

RxJava 2.x

Java:

FirebaseUser user = ...;

UserProfileChangeRequest request = new UserProfileChangeRequest.Builder()
        .setDisplayName("John Doe")
        .setPhotoUri(Uri.parse("http://my.photo/johndoe"))
        .build();

RxFirebaseUser.updateProfile(user, request)
        .subscribe(new Action() {
            @Override
            public void run() {
            	// Update successful
            }
        }, new Consumer<Throwable>() {
            @Override
            public void accept(Throwable throwable) {
                // Update was not successful
            }
        });

Kotlin:

val user: FirebaseUser = ...

val request = UserProfileChangeRequest.Builder()
        .setDisplayName("John Doe")
        .setPhotoUri(Uri.parse("http://my.photo/johndoe"))
        .build()

user.rxUpdateProfile(request)
        .subscribe({
            // Update successful
        }) {
            // Update was not successful
        }