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

magic-auth-context

v0.2.2

Published

A react context and hook that provide Magic.link functionality across your app.

Downloads

1

Readme

magic-auth-context

A react context and hook that provides Magic.link functionality across your app.

// Wrap your app...
import { MagicAuthProvider } from 'magic-auth-context';
<MagicAuthProvider>
  <App />
</MagicAuthProvider>

// You're now free to use the hook wherever...
import { useMagicAuth } from 'magic-auth-context';

// Inside some component that prompts the login flow
const { loginWithMagicLink } = useMagicAuth();
// ... somewhere further down in that component
const magicToken = await loginWithMagicLink({ email })

// Inside another component that shows the user
const { metadata } = useMagicAuth();
return `Hello, ${metadata?.email}!`;

Features

  • 5-line integration
  • Supports React hooks.
  • Built with TypeScript, so includes TS types.
  • Since Magic.link maintains a user's session for 7 days, magic-auth-context automatically attempts to re-authenticate on startup if a user is already logged into your app.

Installation

Using yarn

yarn add magic-auth-context

Getting Started

For a working example - look at the example app included at example/.

First, get your Magic.link public API key.

Configure the library by wrapping your application in MagicAuthProvider, and providing this magicApiKey.

For example, in an app where you're calling ReactDOM.render() yourself:

// src/index.tsx
import React from "react"
import ReactDOM from "react-dom"
import { MagicAuthProvider } from "magic-auth-context"
import App from "./App"

ReactDOM.render(
    <MagicAuthProvider magicApiKey='your-magic-api-token'>
        <App />
    <MagicAuthProvider />,
    document.getElementById('app')
);

Then you can use the useMagicAuth hook in your components to access authentication state (isLoggedIn, attemptingReauthentication, metadata, and magicDIDToken) and authentication methods (loginWithMagicLink() and logout()).

// src/ComponentThatUsesAuth.tsx

function ComponentThatUsesAuth() {
    const { isLoggedIn, metadata, attemptingReauthentication, logout, loginWithMagicLink } = useMagicAuth();
    const [emailValue, setEmailValue] = React.useState<string>('');

    if (attemptingReauthentication) {
        return <div>Attempting to reauthenticate user...</div>
    }

    if (isLoggedIn) {
        return (
            <div>
                Hello {metadata?.email}{" "}
                <br />
                <button onClick={logout}>
                    Log out
                </button>
            </div>
        )
    }

    const handleLoginSubmit = (e: React.FormEvent) => {
        e.preventDefault();
        loginWithMagicLink({ email: emailValue });
    }

    return <form id="login-with-email" onSubmit={handleLoginSubmit}>
        <div className="form-group">
            <label htmlFor="email">Email address</label>
            <input type="email" name="email" aria-describedby="emailHelp" value={emailValue} onChange={e => setEmailValue(e.target.value)} />
        </div>
        <button type="submit">Log In</button>
    </form>
}

TODOs

  • Handle Magic errors
  • Tests for example/ app
  • Configure whether to automatically attempt to re-authenticate on startup
    • Security considerations around shared computers / persistent sessions
  • Support loginWithSMS()
  • Add Magic.link API key screenshot
  • Refresh magicDIDToken when it expires
  • Handle changing config e.g. magicApiKey and magicOptions
  • Test auto-reauthentication functionality

Influences

Thank you to dts-cli for providing the framework to make the library, and react-oidc-context for inspiration.

License

This project is licensed under the MIT license. See the LICENSE file for more info.