Code Monkey home page Code Monkey logo

fusionauth-example-react's Introduction

FusionAuth Example: React

About

This simple example app shows how you can use FusionAuth in a React app to log in, log out, and manipulate user data.

Setup

  1. Make sure you have everything you need to run this app:

  2. Clone this repository.

    git clone https://github.com/FusionAuth/fusionauth-example-react.git
  3. Configure your app in the FusionAuth admin panel (default localhost:9011).

    1. Go through the setup wizard if you haven't already.
    2. Create a new FusionAuth application.
    3. Set the OAuth Redirect URI to http://localhost:9000/oauth-callback.
    4. Copy your app's Client ID, Client Secret, Redirect URI, Application ID, and API Key into the config.js file in the root directory of this project.
    5. Register at least one user with your application.
  4. Make sure FusionAuth is running, then install dependencies and start the app. The React app should automatically open in your browser at localhost:8080.

    cd server
    npm install
    npm start
    cd client
    npm install
    npm start

Understanding the Example

Structure

The app has three parts, each running on a different localhost port (unless you've decided to set it up otherwise):

  • localhost/8080 is your React app. It has a single route (/) and makes calls to the Express app.
  • localhost/9000 is your Express app. It has several routes (like /login and /logout), which are used by the React app. The Express app makes calls to FusionAuth.
  • localhost/9011 is your instance of FusionAuth. It has several endpoints (like /authorize and /introspect). It accepts calls from the Express app and sends back information, such as access tokens and user registration data.

So, the parts connect like this:

8080 <-> 9000 <-> 9011

The React app never talks directly to FusionAuth. This is important, because the React app can be easily picked apart by anyone online, which means you can't keep confidential information there. While some calls directly to FusionAuth are safe, best practice is to keep things separated like this.

Logging In/Out

When the user clicks on sign in, the React app redirects to the Express server's /login route, which redirects to FusionAuth's authorize endpoint. FusionAuth renders the username/password form, authenticates the user, and redirects to the configured Redirect URI (/oauth-redirect on the Express server) with an Authorization Code.

The Express server sends the Authorization Code (as well as its Client ID and Secret) to FusionAuth's /token endpoint. FusionAuth validates everything and sends back an Access Token. The Express Server saves this token in session storage and redirects back to the React client.

When the user clicks on sign out, the React app sends a request to the Express server's /logout route, which sends a request to FusionAuth's /logout endpoint, deletes the relevant cookie, and deletes the Access Token from session storage.

The presence of the Access Token in session storage is what defines whether or not a user is logged in, because FusionAuth will not allow retrieval or modification of user data without a valid Access Token.

Rendering the React App

When the React client mounts, it sends a request to the Express server's /user route. If there's an Access Token in session storage, the Express server uses FusionAuth's /introspect and /registration endpoints to get data for the current user; these give us the token and registration JSON objects seen in the example app.

If there is no Access Token (or if it's expired), /user will instead return an empty object. The React components use the existence of token (or lack thereof) to determine whether to render the page in its logged-in or logged-out state.

Editing User Data

All of your FusionAuth users have a registration.data object for storing arbitrary data related to the user. The example app allows logged-in users to modify registration.data.userData by changing its value in the <textarea>, but all registration information is able to be set in this way.

When the <textarea> is changed, the React client makes a request to the Express server's /set-user-data route, which makes a request to FusionAuth's /registration endpoint.

Using This Example as a Starting Point

If you want to use this example app as a jumping-off point for your own FusionAuth app, you can easily strip it down or expand upon it.

  • remove, replace, or add React components in /client/app/components/ and update references in /client/app/index.js
  • remove, replace, or add styles in /client/app/styles/ and update references in /client/app/index.css
  • remove, replace, or add routes in /server/routes/ and update references in /server/index.js

Contributing

TODO

fusionauth-example-react's People

Contributors

mooreds avatar matt-boisseau avatar dependabot[bot] 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.