npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

superauth

v0.0.7

Published

Firebase Authentication React Hook

Downloads

12

Readme

superauth

React hooks for firebase authentication

npm version All Contributors

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 useFirebaseAuth: user (a user object) and signOut (a function to sign out).

API

An import from superauth provides FirebaseAuthProvider, FirebaseAppProvider , useAuth, AuthMethod 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.

| Parameter | Description | | :------------------- | :--------------------------------------------------------------------------- | | loading | Set to true if the rest of the session properties are indeterminate. | | isSignedIn | Set to true if the user is signed in. | | user | A user object if signed in, otherwise an empty object. See below. | | signInError | The error from the previous signIn attempt or null if it was a success. | | createAuthProvider | A function that returns a provider instance given an enum AuthProvider value. | | signIn | A function that will take the user on the sign in journey. If successful, isSignedIn will be to false. See below for details. | | signOut | A 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 method. method 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.

| Parameter | Description | | :---------- | :---------------------------- | | ANONYMOUS | No credentials required. | | GITHUB | Authenticate against GitHub | | GOOGLE | Authenticate against Google. | | FACEBOOK | Authenticate against Facebook | | TWITTER | Authenticate against Twitter |

License

APACHE Licensed