亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

Table of Contents
Redux Authentication: Getting Started
Register Auth0
Set up the web server
Home Web Front-end JS Tutorial Redux Authentication: Secure Your Application with Auth0

Redux Authentication: Secure Your Application with Auth0

Feb 17, 2025 am 09:30 AM

Redux Authentication: Secure Your Application with Auth0

Core points

  • Redux provides a structured way to manage state in React applications, making data flows easy to predict and manage, especially for large applications.
  • Auth0 is used for user authentication, providing quick setup and advanced features such as social login and multi-factor authentication without complex backend settings.
  • JSON Web Tokens (JWT) is used for secure, stateless authentication against RESTful APIs, which simplifies the traditional session-based authentication process.
  • This tutorial simplifies the login process using Auth0's Lock widget and uses Redux middleware to handle API calls efficiently and securely.
  • Protected routing ensures that some parts of the application are only accessible to authenticated users, thereby enhancing security.
  • Application architecture includes setting up Redux actions, reducers, and middleware to handle authentication status and fetch data from the API.

Thanks to Peleke Sengstacke for peer review of this article. Thanks to all SitePoint peer reviewers for getting SitePoint content to its best!

Redux is very popular in the React community and even in the wider field, and there is good reason. It is a library created by Dan Abramov that makes processing one-way data streams organized and allows developers to use powerful development features such as time travel and recording/playback.

Sounds great, right? But the problem is: it requires more code to be written. However, if you have experience maintaining large applications, you may know that data processing can become difficult to control and difficult to manage. With Redux, we can always have a clear understanding of the status of our application and know exactly what our data is doing.

In this tutorial, we will learn how to start creating a real React Redux application that authenticates users and calls the remote API to fetch data. Our app will retrieve the Star Wars Jedi list from the Node backend so we can display their names and photos. For authentication, we will use Auth0 so that we can get up and running quickly, and we can also easily get features like social login and multi-factor authentication.

Redux Authentication: Secure Your Application with Auth0

We won't go into the basic concepts of Redux, so if you're not familiar with the library, check out some of the following excellent introductory resources:

  • How to build a to-do application using React, Redux, and Immutable.js
  • Redux Documentation

The source code of our upcoming application can be downloaded from here.

Redux Authentication: Getting Started

The React project for this tutorial will be written in ES2015, so we will compile it to ES5 using Babel and handle the module bundle using webpack. Instead of setting it up from scratch, let's start with the real-world starter example of Dan in the Redux repository. Get a copy and install the dependencies.

npm install

Register Auth0

The best way to authenticate for single page applications, such as the one we are building, is to use JSON Web Tokens (JWT). JWT provides a method for stateless authentication against the RESTful API, which has many advantages over session and cookie-based authentication. The downside is that writing a JWT authentication solution yourself can be tricky and error-prone, but luckily, we can use Auth0 without worrying about any server or security implementation details.

If you haven't done so yet, please visit and sign up for a free Auth0 account. With the free plan, we get 7,000 regular active users and two social identity providers available.

After registering, follow the prompts to initialize your account. Remember that you can have multiple applications under the same account, so choose the domain name that suits your situation – probably the name of your organization. First step, we need to set our localhost URL to the allowed source. This can be done in the "Accepted Sources (CORS)" text area.

Redux Authentication: Secure Your Application with Auth0

Set up the web server

Let's first solve the problem of Jedi Web server. This requires just a simple RESTful API that returns our Jedi as JSON data, and using the NodeJS and Express frameworks is one way to do this quickly. You can use any server-side language or framework you prefer, just return JSON data.

Note: Star Wars purists will notice that we use "Jedis" as the plural form of Jedi throughout the app, but this is not the correct plural form. Instead, we should only use "Jedi". Maybe it's true, but I'm fine with this because it makes our app easier :)

First, initialize an application and install dependencies:

mkdir server && cd server
touch server.js
npm init
npm install express express-jwt cors

We can provide all the code required by the server in a single JavaScript file.

// server.js

const express = require('express');
const app = express();
const jwt = require('express-jwt');
const cors = require('cors');

app.use(cors());
app.use(express.static('public'));

// express-jwt 提供的身份驗(yàn)證中間件。
// 此中間件將檢查傳入請求,以獲取應(yīng)用于它的任何路由上的有效 JWT。
const authCheck = jwt({
  secret: 'AUTH0_SECRET',
  // 如果您的 Auth0 客戶端是在 2016 年 12 月 6 日之前創(chuàng)建的,
  // 請取消注釋下面的行并刪除上面的行
  // secret: new Buffer('AUTH0_SECRET', 'base64'),
  audience: 'AUTH0_CLIENT_ID'
});

var jedis = [
  {
    id: 1,
    name: 'Luke Skywalker',
    image: 'http://localhost:7000/images/luke-skywalker.jpg'
  },
  {
    id: 2,
    name: 'Anakin Skywalker',
    image: 'http://localhost:7000/images/anakin-skywalker.png'
  },
  {
    id: 3,
    name: 'Yoda',
    image: 'http://localhost:7000/images/yoda.png'
  },
  {
    id: 4,
    name: 'Obi-Wan Kenobi',
    image: 'http://localhost:7000/images/obi-wan-kenobi.jpg'
  },
  {
    id: 5,
    name: 'Mace Windu',
    image: 'http://localhost:7000/images/mace-windu.jpg'
  }
];

app.get('/api/jedis', (req, res) => {
  const allJedis = jedis.map(jedi => { 
    return { id: jedi.id, name: jedi.name }
  });
  res.json(allJedis);
});

app.get('/api/jedis/:id', authCheck, (req, res) => {
  res.json(jedis.filter(jedi => jedi.id === parseInt(req.params.id))[0]);
});

app.listen(7000);
console.log('Listening on http://localhost:7000');

We have a Jedi array and two endpoints that handle them. The first endpoint returns all Jedi but only their id and name properties. The second endpoint is located at /jedis/:id, returning a single Jedi, but also including the image URL. We will use our authentication middleware to protect the second endpoint and restrict it to only authenticated users to access.

But how do we actually protect this endpoint? We use express-jwt to create a middleware that looks for incoming JSON Web Tokens and verify them based on the keys we provide. We can then apply this middleware to any of our endpoints - we are doing this on the second parameter of the /jedis/:id endpoint - and only requests containing a valid token can pass.

The middleware itself is set by providing our Auth0 key and client ID to authCheck, where you can provide a key specific to your application. These keys can be found in the Auth0 admin panel under Application .

Jedi images come from a public directory on the server. You can get the same image from the repository, or you can include links to images from other sources in your data, if you prefer.

When the server is in place, let's verify that the API works as expected. We can do this using tools like Postman.

Redux Authentication: Secure Your Application with Auth0

If we go to the /api/jedis route, we will be able to get the full list of Jedi as expected. However, if we try to get a Jedi, we are not allowed to retrieve the resource because we are not sending the token to the server.

Redux Authentication: Secure Your Application with Auth0

Once we implement the API call in the application itself, we will see how to send the token using our request, but essentially we just need to include it using the Bearer scheme in the Authorization header.

...(The subsequent content is similar to the original text, but the sentence is replaced and sentence structure adjustment is adjusted. The length is too long, omitted here)....

The above is the detailed content of Redux Authentication: Secure Your Application with Auth0. For more information, please follow other related articles on the PHP Chinese website!

Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undress AI Tool

Undress AI Tool

Undress images for free

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

Hot Topics

PHP Tutorial
1488
72
How to make an HTTP request in Node.js? How to make an HTTP request in Node.js? Jul 13, 2025 am 02:18 AM

There are three common ways to initiate HTTP requests in Node.js: use built-in modules, axios, and node-fetch. 1. Use the built-in http/https module without dependencies, which is suitable for basic scenarios, but requires manual processing of data stitching and error monitoring, such as using https.get() to obtain data or send POST requests through .write(); 2.axios is a third-party library based on Promise. It has concise syntax and powerful functions, supports async/await, automatic JSON conversion, interceptor, etc. It is recommended to simplify asynchronous request operations; 3.node-fetch provides a style similar to browser fetch, based on Promise and simple syntax

JavaScript Data Types: Primitive vs Reference JavaScript Data Types: Primitive vs Reference Jul 13, 2025 am 02:43 AM

JavaScript data types are divided into primitive types and reference types. Primitive types include string, number, boolean, null, undefined, and symbol. The values are immutable and copies are copied when assigning values, so they do not affect each other; reference types such as objects, arrays and functions store memory addresses, and variables pointing to the same object will affect each other. Typeof and instanceof can be used to determine types, but pay attention to the historical issues of typeofnull. Understanding these two types of differences can help write more stable and reliable code.

JavaScript time object, someone builds an eactexe, faster website on Google Chrome, etc. JavaScript time object, someone builds an eactexe, faster website on Google Chrome, etc. Jul 08, 2025 pm 02:27 PM

Hello, JavaScript developers! Welcome to this week's JavaScript news! This week we will focus on: Oracle's trademark dispute with Deno, new JavaScript time objects are supported by browsers, Google Chrome updates, and some powerful developer tools. Let's get started! Oracle's trademark dispute with Deno Oracle's attempt to register a "JavaScript" trademark has caused controversy. Ryan Dahl, the creator of Node.js and Deno, has filed a petition to cancel the trademark, and he believes that JavaScript is an open standard and should not be used by Oracle

What is the cache API and how is it used with Service Workers? What is the cache API and how is it used with Service Workers? Jul 08, 2025 am 02:43 AM

CacheAPI is a tool provided by the browser to cache network requests, which is often used in conjunction with ServiceWorker to improve website performance and offline experience. 1. It allows developers to manually store resources such as scripts, style sheets, pictures, etc.; 2. It can match cache responses according to requests; 3. It supports deleting specific caches or clearing the entire cache; 4. It can implement cache priority or network priority strategies through ServiceWorker listening to fetch events; 5. It is often used for offline support, speed up repeated access speed, preloading key resources and background update content; 6. When using it, you need to pay attention to cache version control, storage restrictions and the difference from HTTP caching mechanism.

Handling Promises: Chaining, Error Handling, and Promise Combinators in JavaScript Handling Promises: Chaining, Error Handling, and Promise Combinators in JavaScript Jul 08, 2025 am 02:40 AM

Promise is the core mechanism for handling asynchronous operations in JavaScript. Understanding chain calls, error handling and combiners is the key to mastering their applications. 1. The chain call returns a new Promise through .then() to realize asynchronous process concatenation. Each .then() receives the previous result and can return a value or a Promise; 2. Error handling should use .catch() to catch exceptions to avoid silent failures, and can return the default value in catch to continue the process; 3. Combinators such as Promise.all() (successfully successful only after all success), Promise.race() (the first completion is returned) and Promise.allSettled() (waiting for all completions)

Leveraging Array.prototype Methods for Data Manipulation in JavaScript Leveraging Array.prototype Methods for Data Manipulation in JavaScript Jul 06, 2025 am 02:36 AM

JavaScript array built-in methods such as .map(), .filter() and .reduce() can simplify data processing; 1) .map() is used to convert elements one to one to generate new arrays; 2) .filter() is used to filter elements by condition; 3) .reduce() is used to aggregate data as a single value; misuse should be avoided when used, resulting in side effects or performance problems.

JS roundup: a deep dive into the JavaScript event loop JS roundup: a deep dive into the JavaScript event loop Jul 08, 2025 am 02:24 AM

JavaScript's event loop manages asynchronous operations by coordinating call stacks, WebAPIs, and task queues. 1. The call stack executes synchronous code, and when encountering asynchronous tasks, it is handed over to WebAPI for processing; 2. After the WebAPI completes the task in the background, it puts the callback into the corresponding queue (macro task or micro task); 3. The event loop checks whether the call stack is empty. If it is empty, the callback is taken out from the queue and pushed into the call stack for execution; 4. Micro tasks (such as Promise.then) take precedence over macro tasks (such as setTimeout); 5. Understanding the event loop helps to avoid blocking the main thread and optimize the code execution order.

Understanding Event Bubbling and Capturing in JavaScript DOM events Understanding Event Bubbling and Capturing in JavaScript DOM events Jul 08, 2025 am 02:36 AM

Event bubbles propagate from the target element outward to the ancestor node, while event capture propagates from the outer layer inward to the target element. 1. Event bubbles: After clicking the child element, the event triggers the listener of the parent element upwards in turn. For example, after clicking the button, it outputs Childclicked first, and then Parentclicked. 2. Event capture: Set the third parameter to true, so that the listener is executed in the capture stage, such as triggering the capture listener of the parent element before clicking the button. 3. Practical uses include unified management of child element events, interception preprocessing and performance optimization. 4. The DOM event stream is divided into three stages: capture, target and bubble, and the default listener is executed in the bubble stage.

See all articles