This tutorial of Passport.js walk you through the steps to set up an authentication strategy Node.js local using Redis. You will learn to create an authentication interface with Passport.js, where users will provide their usernames and passwords. Despite its complexity, authentication mechanisms can be easily implemented in Node.js.

Technologies to use

Before we jump headfirst into our Passport.js authentication tutorial, let's take a look at the technologies we're going to use in this chapter.

What is Passport.js?

  • Passport.js is an authentication middleware Node.js simple and discreet for Node.js
  • Passport.js can be placed in any web-based application Express.js.
  • Passport is a middleware authentication for Node.js that we are going to use for session management.

What is Redis?

Redis es un almacén de estructura de datos en memoria de Open SourceEl Código Abierto u Open Source se refiere al código fuente del software que es abiertamente alcanzable y que puede ser cambiado y distribuido por cualquier persona. La propuesta de código abierto estipula diez requerimientos para las licencias de software de código abierto. El principio El código fuente de un software se hace público: cualquiera puede leerlo, desarrollar el propio software y copiarlo. El software puede ser utilizado o distribuido plus (con licencia BSD), utilizado como base de datos, cacheUn caché es un tipo de memoria auxiliar de la que se puede recuperar a alta velocidad con una capacidad de almacenamiento relativamente pequeña. Se encuentra entre la unidad central de procesamiento (CPU) y la memoria principal. Ayuda a evitar el acceso al disco duro o los recálculos complejos almacenando temporalmente ciertos datos y haciéndolos disponibles rápidamente cuando sea necesario. El caché almacena una copia de la petición actual y plus y intermediario de mensajes.

Redis is designed to support different types of abstract data structures, such as strings, hashes, lists, sets, ordered sets with range queries, bitmaps, hyperlinks, and geospatial indexes with radio queries.

We will store the information of the session of our user in Redis, and not in the memory of the process. In this way our application will be much easier to scale.

The demo application that needs authentication

For demonstration purposes, let's build an application that does just the following:

  • expose a login form,
  • expose two protected pages:
    • a profile page,
    • secured notes

The structure of the project

We are going to use the following structure:

├── app | ├── authentication | ├── note | ├── user | ├── index.js | └── layout.hbs ├── config | └── index.js ├── index.js └── package.json

As you can see, we will organize the files and directories around the characteristics. We will have a user page, a notes page and some functions related to authentication.

The Node.js authentication flow

Our target¿Qué es un objetivo?En marketing, un objetivo es el resultado que se pretende alcanzar en un periodo de tiempo, a través el uso de los recursos disponibles. Por tanto, se debe formular de una forma clara y hace falta que sea accesible y medible. plus es implementar el siguiente flujo de autenticación en nuestra aplicación utilizando Passport.js:

  1. User enters username and password
  2. The application checks if they match.
  3. If they match, send a header Set-Cookie to be used to authenticate other pages.
  4. Cuando el usuario visita páginas del mismo domainUn dominio es una sección de Internet con direcciones que comparten un sufijo común o están bajo el control de una organización o individuo en particular. Está organizado jerárquicamente. Tanto los objetos físicos como los virtuales pueden ser direccionados con el nombre de dominio. Estos objetos pueden ser webs, ordenadores en red o servicios, como impresoras, faxes o servidores de correo. Cada objeto está referenciado por una dirección IP única, plus, the cookieUna cookie es un registro que es almacenado por un servidor web en el disco duro del usuario. El archivo recibido es una combinación de caracteres formada por números y letras, que asigna una cierta identidad al usuario (cliente). No podrán exceder un tamaño máximo de 4 KB y contendrán, por ejemplo, información sobre la extensión de la visita o sobre lo que el usuario haya pulsado. Cuando el cliente plus configurada previamente se agregará a todas las solicitudes
  5. Authenticate restricted pages with this cookie.

To configure an authentication strategy like this in a Node.js application using Passport.js, follow these three steps:

Step 1: Express Configuration

Vamos a utilizar Express para el marco del serverLos servidores son ordenadores centrales y potentes dentro del campo de la tecnología de la información que procesan y proporcionan software y archivos en una red. Desde el punto de vista de un cliente, varios ordenadores en una red pueden ponerse en contacto con el servidor central para conseguir la información solicitada. En la arquitectura cliente-servidor, el servidor puede ser un software que proporciona un servicio y se ejecuta en plus.

// file: app / index.js const express = require ('express') const passport = require ('passport') const session = require ('express-session') const RedisStore = require ('connect-redis') ( session) const app = express () app.use (session ({store: new RedisStore ({url: config.redisStore.url}), secret: config.redisStore.secret, resave: false, saveUninitialized: false})) app .use (passport.initialize ()) app.use (passport.session ())
What did we do here?

First of all, we require all the dependencies that session management needs. After that, we have created a new instance of the module express-session, which will store our sessions.

For the backup store, we are using Redis, but you can use any other, like MySQLConcepto de MySQL¿Qué es el programa MySQL?MySQL es un sistema de administración de bases de datos que tiene una doble licencia. Por una parte es de código abierto, pero por otra, tiene una versión comercial gestionada por la compañía Oracle. En este momento, es la base de datos de código abierto más famosa y utilizada en el mundo entero.Como él, podemos hallar otras como la propia Oracle o Microsoft SQL plus or MongoDB.

Step 2: Setting up Passport.js for Node.js

Passport.js is a great example of a library that uses plugins. In this tutorial of passport.js, we are adding the module passport-local which enables easy integration of a simple local authentication strategy using usernames and passwords.

For the sake of simplicity, in this example, we are not using a second backing store, but only an in-memory user instance. In real life applications, findUser it would look up a user in a database.

// file: app / authenticate / init.js const passport = require ('passport') const bcrypt = require ('bcrypt') const LocalStrategy = require ('passport-local'). Strategy const user = {username: 'test -user ', passwordHash:' bcrypt-hashed-password ', id: 1} passport.use (new LocalStrategy ((username, password, done) => {findUser (username, (err, user) => {if (err) ) {return done (err)} // User not found if (! user) {return done (null, false)} // Always use hashed passwords and fixed-time comparisons bcrypt.compare (password, user.passwordHash, (err , isValid) => {if (err) {return done (err)} if (! isValid) {return done (null, false)} return done (null, user)})})}))

Once the returns of findUser with our user object all that's left is to compare the user's hash password and the actual password to see if there is a match. Always store hashed passwords and use fixed time comparison to avoid time attacks.

If it's a match, we allow the user to enter: return done (null, user) (returning the user the Passport), if not we return an unauthorized error (returning nothing to the Passport- return done (null)).

Step 3: Add protected endpoints

To add protected endpoints, we are leveraging the pattern of middleware what do you use Express. For that, we are going to create the middleware authentication first:

// file: app / authentication / middleware.js function authenticationMiddleware () {return function (req, res, next) {if (req.isAuthenticated ()) {return next ()} res.redirect ('/')}}

It only has a role if the user is authenticated (has the correct cookies); just call the next middleware. Otherwise, it redirects to the page where the user can log in.

Its use is as easy as adding a new middleware to the route definition.

// file: app / user / init.js const passport = require ('passport') app.get ('/ profile', passport.authenticationMiddleware (), renderProfile)
Summary - Authentication with Passport.js

In this Passport.js tutorial, you have learned how to add basic authentication to your Node.js application. Later, you can extend it with different authentication strategies, such as FacebookConcepto de Facebook¿Qué es Facebook?Facebook es una red social hecha por personas y pensada para conectar a personas. Es una de las pioneras de este sector, una de las primeras plataformas que llegaron a Internet con la finalidad de facilitar la comunicación entre usuarios de todas partes, compartir información y contactar con familiares lejanos, amistades o conocidos.Hoy en día, es la red más popular de todo Internet. Nacida en 2004 plus or TwitterTwitter es una red social en Internet que permite a los usuarios difundir información en tiempo real. La característica más notable de twitter solía ser su limitación de tweets a 140 caracteres, pero en septiembre de 2017 se incrementó a 280 caracteres. El único requerimiento para utilizar Twitter es la creación de una cuenta gratuita. Tweets Twitter contiene pequeñas piezas de información llamada tweets. Se puede escribir un máximo de plus. You can find more strategies at http://passportjs.org/.