Coder Social home page Coder Social logo

abredan / nativescript-firebase-auth Goto Github PK

View Code? Open in Web Editor NEW

This project forked from nickiliev/nativescript-firebase-auth

0.0 1.0 0.0 266.6 MB

POC app with Firebase authentication methods (Facebook, Google, username)

CSS 6.34% TypeScript 93.66%

nativescript-firebase-auth's Introduction

Firebase authentication in NativeScript

This POC application demonstrates how to use Firebase authentication methods. Everything is setup in the master branch to work with debug build. Currently implemented authentication methods:

  • Facebook
  • Google
  • email / password based login
  • anonymious login

To enable Firebase authentication in your own project follow the steps below.

Facebook authentication

Facebook console part

Steps to implement facebook auth via Firebase in NativeScrip app.

  1. log in https://developers.facebook.com/apps/

  2. go to Settings >> Basic and add Android platform

  3. check AppId and AppSecret (will be needed in firebase console later) example AppId: 123456789123456 example AppSecret: xxyyzzccvvbb6955387c2836e2b37530

  4. for Google Play Package Name add applicationId from your package.json (e.g. in this case org.nativescript.firebaseAuth)

  5. for Class Name add com.tns.NativeScriptActivity

  6. the final step is to add your Key Hashes (if you do not know them now, do not worry - we will add them at our final step!)

Firebase console part

  1. log in https://console.firebase.google.com
  2. go to Authentication
  3. enable Facebook Authentication
  4. add AppID and AppSecret from the Facebook console
  5. save all

Project Steps

  1. if you have previously included Firebase plugin delete the platforms folder (do not save your google-services.json as you will need newly generated one)

  2. if you do not have the plugin install it with tns plugin add nativescript-plugin-firebase

  3. open your firebase.nativescript.json and make sure that "facebook_auth": true

  4. tns platform add android

  5. generate your google-services.json from https://console.firebase.google.com (make new one with the facebook enabled!!!)

  6. paste google-services.json in platforms/Android/

  7. go to app/App_Resources/Android/AndroidManifest.xml and add <meta-data android:name="com.facebook.sdk.ApplicationId" android:value="@string/facebook_app_id"/> Add it as a child of application on the activity level.

  8. go to app/App_Resources/Android/values folder and create file called facebooklogin.xml with content

<?xml version='1.0' encoding='utf-8'?>
<resources>
    <string name="facebook_app_id">123456789123456</string>
</resources>
The value for `facebook_app_id` is your Facebook AppId
  1. initialize firebase if not already done:
firebase.init({
    onAuthStateChanged: function (data) { // optional but useful to immediately re-logon the user when he re-visits your app
        console.log(data.loggedIn ? "Logged in to firebase" : "Logged out from firebase");
        if (data.loggedIn) {
            console.log("user's email address: " + (data.user.email ? data.user.email : "N/A"));
        }
    },

}).then(instance => {
    console.log("firebase.init done");
}).catch(err => {
    console.log("Firebase init error: " + err);
});
  1. finally implement the login for Facebook
firebase.login({
    type: firebase.LoginType.FACEBOOK,
    scope: ['public_profile', 'email'] // optional: defaults to ['public_profile', 'email']
}).then(
    function (result) {
        console.log(JSON.stringify(result));
    },
    function (errorMessage) {
        console.log(errorMessage);
    }
);
  1. Remember those Key Hashes we need to set in Facebook console!? Well after your first attempt to login in, open adb logcat and look for something like Key hash <......> does not match any stored key hashes. Copy the hash key and paste it to the faceboook developer console. Voila!

    example key hash : rH+McZXCVPZXCVCZXCVdyEYMoI=

Possible issue:

Could not find com.google...

And there's this one: Could not find com.google.firebase:firebase-auth:9.4.0. ... Command /Users/niliev/Desktop/git-nick/NativeScript-Firebase-FacebookAuth/firebaseAuth/platforms/android/gradlew failed with exit code 1 That means making sure you have the latest Google Repository bits installed. Just run android from a command prompt and install any pending updates.

Also, an error like "Could not find com.google.firebase:firebase-core:9.0.0" can be caused by having more than one version of the Android SDK installed. Make sure ANDROID_HOME is set to the Android SDK directory that is being updated otherwise it will seem as though your updates have no effect.

e.g.: 12-22 14:47:09.579: W/fb4a.BlueServiceQueue(10900): X.2Oo: [code] 404 [message]: Key hash hBkR5079MNgyiKSzf1x2/Tv0HjI= does not match any stored key hashes. (404) [extra]: null

Key hash: hBkR5079MNgyiKSzf1x2/Tv0HjI=

Google authentication

Steps to implement Google auth via Firebase in NativeScrip app.

Firebase Console Steps

  1. log in https://console.firebase.google.com

  2. go to Authentication

  3. enable Google Authentication + enable Web SDK configuration in the same tab

  4. Go to Overview >> Project Settings and add SHA1 certificate

    Note: You can generate debug and release certificate fingerprints. To create release certificate you will need generate keystore file and its name

Project Steps

  1. Go through steps 1-6 from Facebook >> Project Steps and make sure everything is done (for step 3 look for google_auth: true)
  2. If you haven't initialized firebase yet, then go through step 9 from Facebook >> Project Steps
public onGoogleLogin() {
    firebase.login({
        type: firebase.LoginType.GOOGLE,
    }).then(res => {
        console.log(JSON.stringify(res));
    }).catch(err => {
        console.log(err);
    })
}

Email-Password based authentication

Firebase Console Steps

  • In your Firebase console enable sign-in method "Email/Password"
  • Firebase has automatic guards for validation of emails and will return error if invalid email is provided
  • Paswword mandatory minimum length is 6 characters
  • Multiple accounts per email address can resolve smae user loggin with Facebook, Google and emaul using the same credentials for emaul (account linking).

Code samples for email/password based login

public onPasswordLogin() {
    firebase.login({
        type: firebase.LoginType.PASSWORD,
        email: this.email,
        password: this.pass
    }).then(user => {
        console.log(JSON.stringify(user));
        this.currentUser = new User(user.anonymous, user.email, user.emailVerified, user.name, user.profileImageURL, user.refreshToken, user.uid);
        frame.topmost().navigate({ moduleName: "welcome-page", context: { currentUser: this.currentUser } });
    }).catch(err => {
        console.log(err);
        dialogs.alert(err);
    })
}

public onCreateUser() {
    firebase.createUser({
        email: this.newEmail,
        password: this.newPass
    }).then(result => {
        console.log("userid: " + result.key);
    }).catch(err => {
        console.log("createUser error: " + err);
        dialogs.alert(err);
    })
}

public onResetPassword() {
    firebase.resetPassword({
        email: this.email
    }).then(() => {
        // called when password reset was successful,
        // you could now prompt the user to check his email
        dialogs.alert("Password Rest instructions send to " + this.user);
    }).catch(err => {
        console.log(err);
        dialogs.alert(err);
    })
}

public onChangePassword() {
    firebase.changePassword({
        email: this.email,
        oldPassword: 'myOldPassword',
        newPassword: 'myNewPassword'
    }).then(() => {
        // called when password change was successful
    }).catch(err => {
        console.log(err);
        dialogs.alert(err);
    })
}

Anonymious authentication

  • enable anonymious sign-in method in firebase console
// ANONYMOUS login
public onAnonymousLogin() {
    firebase.login({
        type: firebase.LoginType.ANONYMOUS
    }).then(user => {
        console.log(JSON.stringify(user));
        this.currentUser = new User(user.anonymous, user.email, user.emailVerified, user.name, user.profileImageURL, user.refreshToken, user.uid);
        frame.topmost().navigate({ moduleName: "welcome-page", context: { currentUser: this.currentUser } });
    }).catch(err => {
        console.log("Trouble in paradise: " + err);
        dialogs.alert(err);
    })
}

nativescript-firebase-auth's People

Contributors

nickiliev avatar

Watchers

Alain Abredan avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.