Superauth

🌎
Checkout the Superauth website

React hooks for firebase authentication

Installation

$ npm i superauth

or

$ yarn add superauth

Usage

The package expose two custom providers <FirebaseAppProvider> and <FirebaseAuthProvider> as shown here.

import React from 'react';
import { FirebaseAppProvider , FirebaseAuthProvider } from 'superauth';

import App from './App';
import config from './firebaseConfig';

const MyApp = () => (
  <FirebaseAppProvider config={config}>
    <FirebaseAuthProvider>
      <App />
    </FirebaseAuthProvider>
  </FirebaseAppProvider>
);

export default MyApp;

This provides the global context that useAuth needs. You can use useAuth anywhere in your App.

Initially, you will probably want to display either a Sign In screen if not signed in. You can detect if you are signed in like this.

 
import { useAuth } from 'superauth';

const App = () => {

  const { isSignedIn } = useAuth();

useEffect(() => {
    if (isSignedIn) {
      (async () => {
        try {
        /** do your operation **/
        } catch (err) {
          /** throw an exepction **/
        }
      })();
    }
  }, [isSignedIn])


  return (
    <div className="App">
    </div>
  );
};

export default App;
import { useAuth } from 'superauth';

const App = () => {

  const { isSignedIn } = useAuth();

  return (
    <div className="App">
      {isSignedIn ? <Profile /> : <Login />}
    </div>
  );
};

export default App;

We can watch for the change on useEffect or We can either render the Profile or the Login component. .

Here's how you can sign in page with user's Google credentials.

import { useAuth, AuthProvider } from 'superauth';

const Login = () => {

const { isSignedIn , signIn , createAuthProvider } = useAuth();

useEffect(() => {
    if (isSignedIn) {
      (async () => {
        try {
            /** signedIn successfully **/
        } catch (err) {
            /** signin Error **/
        }
      })();
    }
  }, [isSignedIn])

  const onSignIn = authProvider => {
    const provider = createAuthProvider(authProvider);
    signIn(provider);
  };

  return (
    <div>
      <h1>Please Sign In</h1>
      <p>

        <button className="btn google-button" onClick={() => onSignIn(AuthProvider.GOOGLE)}>
          Sign In with Google
        </button>

        <button className="btn github-button" onClick={() => onSignIn(AuthProvider.GITHUB)}>
          Sign In with GitHub
        </button>

      </p>
    </div>
  );
};

Calling onSignIn will redirects you to the authentication page of specficped providers.

After the user is authenticated, you will be redirected back to your app where isSignedIn will be true.

You can rather use a popup, instead of a redirect. To do so first import AuthMethod

import { AuthMethod} from "superauth";

and then change onSignIn` with this.

const onSignIn = authProvider => {
  const provider = createAuthProvider(authProvider);
  signIn(provider, AuthType.WITHPOPUP );
};

You will note that it destructures two things from the call to useFirebaseAuthuser (a user object) and signOut (a function to sign out).

API

An import from superauth provides FirebaseAuthProviderFirebaseAppProvider , useAuthAuthMethod and AuthProvider.

FirebaseAppProvider

Wrap the FirebaseAuthProvider inside FirebaseAppProvider

<FirebaseAppProvider config={config}>
    <FirebaseAuthProvider>
        <App />
    </FirebaseAuthProvider>
</FirebaseAppProvider>

FirebaseAppProvider accepts firebaseConfig in config properties

FirebaseAuthProvider

You must wrap your App in ### FirebaseAuthProvider and ### FirebaseAuthProvider like this.

<FirebaseAuthProvider>
  <App />
</FirebaseAuthProvider>

It provides context for useAuth.

useAuth

useAuth is a custom hook that returns a session object every time that the authentication state changes.

A session object has the following properties.

ParameterDescription
loadingSet to true if the rest of the session properties are indeterminate.
isSignedInSet to true if the user is signed in.
useruser object if signed in, otherwise an empty object. See below.
signInErrorThe error from the previous signIn attempt or null if it was a success.
createAuthProviderA function that returns a provider instance given an enum AuthProvider value.
signInA function that will take the user on the sign in journey. If successful, isSignedIn will be to false. See below for details.
signOutA function that will sign the user out. If successful, isSignedIn will be to false.

signIn

Call signIn with an provider instance and an optional options object.

The options object has a single key of methodmethod is a string with either signInWithRedirect or signInWithPopup. The default is signInWithRedirect.

signIn returns a promise that will resolve upon a successful sign in (if using a popup) or reject if a sign in could not be performed.

signOut

Call signOut to sign the user out.

It returns a promise that will resolve upon a successful sign out or reject if a sign out could not be performed.

AuthProvider

AuthProvider is an enum with the following values.

ParameterDescription
ANONYMOUSNo credentials required.
GITHUBAuthenticate against GitHub
GOOGLEAuthenticate against Google.
FACEBOOKAuthenticate against Facebook
TWITTERAuthenticate against Twitter

License

APACHE Licensed

Mahendra Rathod
Developer from 🇮🇳
@maddygoround

Continue reading

View all →
© 2021 Mahendra Rathod ·