Workshop Fullstack Javascript
  • Bienvenid@s 👨🏼‍💻👩🏻‍💻
  • Prerequisitos 💻🔧
  • Backend
    • Introducción
      • Configuración Inicial
    • Node.js
    • Express.js
      • Configuración
      • Carpeta API
      • Rutas
    • Mongoose.js
      • Conectando a Mongosse
      • Esquemas y Modelos
      • Métodos
      • Rutas
      • Retos 🕵🏻‍♀️ 💻 🕵🏻‍♂️
    • Passport.js
      • Modelo User
      • Estrategia Local
      • Autenticación Service
      • API users
      • Configuración Passport.js
      • Middleware
      • Retos 🦸🏻‍♀️🕵🏼‍♂️
    • Refactor
    • Despliegue 🚀
  • Frontend
    • ReactJS 💙
      • Configuración Inicial
      • Componentes
      • Pages
      • Rutas
      • Conectando la API
      • Authenticación
      • Despliegue 🚀
    • VueJS 💚
      • Configuración Inicial
  • GraphQL
    • pronto...🤷🏼‍♂️
Powered by GitBook
On this page

Was this helpful?

  1. Backend
  2. Passport.js

Configuración Passport.js

PreviousAPI usersNextMiddleware

Last updated 5 years ago

Was this helpful?

Passport sólo proporciona el mecanismo para manejar la autenticación, dejando la responsabilidad de implementar la sesión de manipulación de nosotros mismos y para eso vamos a utilizar .

Esto es necesario ya que queremos que nuestras sesiones de usuario sean persistentes por naturaleza. Antes de ejecutar la aplicación, debemos instalar y añadirla a nuestra lista de dependencias en package.json.

Para hacer eso:

# Install Dependecies
npm i -S connect-mongo express-session

El módulo npm connect-mongo no puede manejar mongodb+srv:// cadenas de conexión. Tendrá que usar los tipos de cadena de conexión más antiguos que comienzan con mongodb://. Como estamos utilizando MongoDB Atlas, debemos conectarnos a Atlas e ir a la vista de clúster, luego conecte su aplicación y luego seleccione Node.js versión 2.2.12, no 3.0. Y no olvide cambiar el /test en su cadena de conexión a /TheNameOfYourDatabase con el nombre de su base de datos.

En nuestro archivo de configuración de express vamos agregar las siguientes lineas:

config/express.js
// New Lines
const connectMongo = require('connect-mongo');
const session = require('express-session');
const passport = require('passport');

const MongoStore = connectMongo(session);

const config = {
  secrets: {
    session: 'w0rksh0p-full5tack-j4v45cr1pt',
  },
};

app.use(passport.initialize());

app.use(session({
    secret: config.secrets.session,
    saveUninitialized: true,
    resave: false,
    store: new MongoStore({
      url: 'mongodb://<username>:<password>@cluster0-shard-00-00-9bgzf.mongodb.net:27017,cluster0-shard-00-01-9bgzf.mongodb.net:27017,cluster0-shard-00-02-9bgzf.mongodb.net:27017/test?ssl=true&replicaSet=Cluster0-shard-0&authSource=admin&retryWrites=true&w=majority',
    }),
  }));

Finalmente nuestro archivo de configuración de express se verá así:

config/express.js
/**
 * Express configuration
 * @author: Cristian Moreno Zulauaga <khriztianmoreno@gmail.com>
 */

const compression = require('compression');
const bodyParser = require('body-parser');
const methodOverride = require('method-override');
const errorHandler = require('errorhandler');
const logger = require('morgan');
// New line
const connectMongo = require('connect-mongo');
const session = require('express-session');
const passport = require('passport');

const MongoStore = connectMongo(session);

const config = {
  secrets: {
    session: 'w0rksh0p-full5tack-j4v45cr1pt',
  },
};

module.exports = (app) => {
  const env = app.get('env');

  app.use(compression());
  app.use(bodyParser.urlencoded({ extended: false, limit: '50mb' }));
  app.use(bodyParser.json({ limit: '50mb' }));
  app.use(methodOverride());
  app.use(logger('dev'));
  // New line
  app.use(passport.initialize());
  // New line
  app.use(session({
    secret: config.secrets.session,
    saveUninitialized: true,
    resave: false,
    store: new MongoStore({
      url: 'mongodb://<username>:<password>@cluster0-shard-00-00-9bgzf.mongodb.net:27017,cluster0-shard-00-01-9bgzf.mongodb.net:27017,cluster0-shard-00-02-9bgzf.mongodb.net:27017/test?ssl=true&replicaSet=Cluster0-shard-0&authSource=admin&retryWrites=true&w=majority',
    }),
  }));

  if (env === 'development' || env === 'test') {
    app.use(errorHandler()); // Error handler - has to be last
  }
};

Ahora vamos agregar nuestra ruta de estrategia local al archivo de rutas.

routes.js
/**
 * Main application routes
 * @author: Cristian Moreno Zuluaga <khriztianmoreno@gmail.com>
 */

// Import Endpoints
const helloWorld = require('./api/helloworld');
const product = require('./api/product');
const user = require('./api/user');
// New line
const auth = require('./auth');

module.exports = (app) => {
  app.use('/api/helloworld', helloWorld);
  app.use('/api/products', product);
  app.use('/api/users', user);
  // New line
  app.use('/auth', auth);
};

Esta ruta será la encargada de validar el login de un usuario. Podemos probar en postman esto /api/users

Request Body:

{
  "name": "CRISTIAN MORENO",
  "email": "khriztianmoreno@myemail.com",
  "password": "my-secret-password"
}

Response:

{
    "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJfaWQiOiI1OWFiNzkyMWQ1Yzk3NjJlZGQzZmUwZDgiLCJpYXQiOjE1MDQ0MDk4ODksImV4cCI6MTUwNDQyNzg4OX0.2gZPXZ-dQc3kQ1fcIDryHm4gIqWLvcw6guAOnP0ueGU"
}

express-session
express-session
Connect to Cluster