Firebase Authentication
Firebase Authentication
#firebase-
authenticati
on
Table of Contents
About 1
Remarks 2
Examples 2
Installation or Setup 2
Synopsis 2
Examples 6
Credits 10
About
You can share this PDF with anyone you feel could benefit from it, downloaded the latest version
from: firebase-authentication
It is an unofficial and free firebase-authentication ebook created for educational purposes. All the
content is extracted from Stack Overflow Documentation, which is written by many hardworking
individuals at Stack Overflow. It is neither affiliated with Stack Overflow nor official firebase-
authentication.
The content is released under Creative Commons BY-SA, and the list of contributors to each
chapter are provided in the credits section at the end of this book. Images may be copyright of
their respective owners unless otherwise specified. All trademarks and registered trademarks are
the property of their respective company owners.
Use the content presented in this book at your own risk; it is not guaranteed to be correct nor
accurate, please send your feedback and corrections to [email protected]
https://riptutorial.com/ 1
Chapter 1: Getting started with firebase-
authentication
Remarks
This section provides an overview of what firebase-authentication is, and why a developer might
want to use it.
It should also mention any large subjects within firebase-authentication, and link out to the related
topics. Since the Documentation for firebase-authentication is new, you may need to create initial
versions of those related topics.
Examples
Installation or Setup
Synopsis
A fully functional demo of Firebase v3 Web authentication viewable here. Sign in with Facebook,
Github, Google, Twitter, password based, and anonymous accounts. The code, available on
Github, is easy to read and follow and is well documented. The focus is on the fully functional
authentication system.
Password based users are sent a validation link. They can also change their email address and
password - both of these events send a verification email as an additional security measure.
Lastly, the difference between authentication, client side authorization, and server side
authorization secured via Firebase Realtime Database Security Rules is demonstrated.
1. Prerequisites
https://riptutorial.com/ 2
6. Clone this set of files and folders to your IDE. git clone
https://github.com/rhroyston/firebase-auth.git
7. Using Firebase Tools command line, push your IDE project to your Firebase project.
firebase deploy
8. View Firebase project in your browser. Any broken images or errors? Easy fix below.
9. You may need to update href, src, and background: url in all JS, CSS, and all HTML
files depending on your Web hosting folder structure .
1. Use Find feature to search for both href and src and update as necessary.
2. Browser Console will display any remaining incorrect paths errors.
3. Note script.js line 781 privateLink.href = "../firebase-auth/private" the ..
seems to be required.
4. Once all pages render properly from Firebase Hosting (no broken images or
console errors), continue.
3. Configure Firebase
1. Enable all 6 forms of authentication. Follow the instructions on configuring social media
site settings.
2. Customize the Email Action Handler URL to point to your Firebase Web app URL +
'/ack', e.g. https://my-app-1234/ack.
1. Notice that updating email address or password options are not present in your
Account page.
2. Notice any extra links in the side menu drawer?
https://riptutorial.com/ 3
3. Try Deleting your account. What Happens?
3. Logout
You can use Firebase Authentication to let your users authenticate with Firebase using their email
addresses and passwords, and to manage your app's password-based accounts.
In this example, we use these steps to set it up for our Android project which is based on
JavaScript.
But before doing so, this is what needs to get done before:
There are 2 auth methods required to create a password based user with displayName, namely
.createUserWithEmailAndPassword and .updateProfile. I have nested the latter and created a
single function which fires both of these methods for ease of use.
function registerPasswordUser(email,displayName,password,photoURL){
var user = null;
//NULLIFY EMPTY ARGUMENTS
for (var i = 0; i < arguments.length; i++) {
arguments[i] = arguments[i] ? arguments[i] : null;
}
auth.createUserWithEmailAndPassword(email, password)
.then(function () {
user = auth.currentUser;
user.sendEmailVerification();
})
.then(function () {
user.updateProfile({
displayName: displayName,
photoURL: photoURL
https://riptutorial.com/ 4
});
})
.catch(function(error) {
console.log(error.message,7000);
});
console.log('Validation link was sent to ' + email + '.');
}
https://riptutorial.com/ 5
Chapter 2: Google Plus Authentication with
Android
Examples
Google Plus Sign-in Authentication
onCreate
.requestEmail()
.build();
mGoogleApiClient = new GoogleApiClient.Builder(this)
.enableAutoManage(this /* FragmentActivity */, this /* OnConnectionFailedListener */)
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.addApi(Auth.GOOGLE_SIGN_IN_API,gso)
.addApi(Plus.API)
.build();
onStart()
@Override
public void onConnected(Bundle bundle) {
mSignInClicked = false;
getProfileInformation();
//getGoogleOAuthTokenAndLogin();
Toast.makeText(this, "User is connected! (in onConnected
MActivty)",Toast.LENGTH_LONG).show();
// Get user's information
https://riptutorial.com/ 6
// Update the UI after signin
// updateUI(true);
}
@Override
public void onConnectionSuspended(int i) {
mGoogleApiClient.connect();
//updateUI(false);
}
@Override
public void onConnectionFailed(ConnectionResult connectionResult) {
if (!connectionResult.hasResolution()) {
GooglePlayServicesUtil.getErrorDialog(connectionResult.getErrorCode(), this,
0).show();
} else if(connectionResult.hasResolution()) {
mConnectionResult = connectionResult;
resolveSignInError();
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
https://riptutorial.com/ 7
Authenticating with Firebase,
//
If sign in fails, display a message to the user. If sign in succeeds
//
the auth state listener will be notified and logic to handle the
//
signed in user can be handled in the listener.
if
(!task.isSuccessful()) {
Log.w("TAG", "signInWithCredential", task.getException());
Toast.makeText(MainActivity.this, "Authentication failed.",
Toast.LENGTH_SHORT).show();
}else{
SharedPreferences prefs =
PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
Log.e("SahajLOG", "Login PREF ISSSSSSSS ONACTIVITYRESULT
"+prefs.getBoolean("AuthByGplus", AuthByGplus));
prefs.edit().putBoolean("AuthByGplus", true).commit();
Log.e("SahajLOG", "Login PREF ISSSSSSSS ONACTIVITYRESULT IFTRUE..
"+prefs.getBoolean("AuthByGplus", AuthByGplus));
Intent intent=new Intent(getApplicationContext(),MainActivity.class);
startActivity(intent);
finish();
}
// [START_EXCLUDE]
// hideProgressDialog();
// [END_EXCLUDE]
}
});
}
onActivityResult
@Override
protected void onActivityResult(int requestCode, int responseCode,
Intent intent) {
if (requestCode == GOOGLE_SIGIN) {
if (responseCode != RESULT_OK) {
mSignInClicked = false;
}
mIntentInProgress = false;
if (!mGoogleApiClient.isConnecting()) {
mGoogleApiClient.connect();
if (mGoogleApiClient.isConnected()) {
// getGoogleOAuthTokenAndLogin();
}
}
GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(intent);
if (result.isSuccess()) {
// Google Sign In was successful, authenticate with Firebase
GoogleSignInAccount account = result.getSignInAccount();
https://riptutorial.com/ 8
Log.e("SahajLOG", "account " + account.getIdToken());
//getGoogleOAuthTokenAndLogin();
firebaseAuthWithGoogle(account);
} else {
// Google Sign In failed, update UI appropriately
// [START_EXCLUDE]
Log.e("SahajLOG", "SIGN IN FAILED");
// [END_EXCLUDE]
}
Logout
@Override
public void onLogout() {
mAuth.signOut();
if (mGoogleApiClient.isConnected()) {
Plus.AccountApi.clearDefaultAccount(mGoogleApiClient);
mGoogleApiClient.disconnect();
mGoogleApiClient.connect();
SignedInWithGoogle=false;
}
// Google sign out
switchToLoginFragment();
}
https://riptutorial.com/ 9
Credits
S.
Chapters Contributors
No
Google Plus
2 Authentication with Sahaj Rana, ThunderStruct
Android
https://riptutorial.com/ 10