Search code examples
node.jsapisequelize.jspassport-local

How can create two local strategy in same porject for different user'?


I am working on project where i have to create two login or different user employee or customer how can create two local passport in node js with sequelize


Solution

  • Couldn't find it in the docs but passport.use() can receive name as the first param.

    passport.use('local-employee', new LocalStrategy(...))
    
    passport.use('local-customer', new LocalStrategy(...))
    

    full example:

    const express = require('express')
    const passport = require('passport');
    const LocalStrategy = require('passport-local');
    
    const app = express();
    app.use(require('cookie-parser')());
    app.use(require('body-parser').urlencoded({ extended: true }));
    app.use(require('express-session')({
        secret: 'BAH',
        resave: true,
        saveUninitialized: true
      }));
    
    passport.serializeUser(function(user, done) {
        done(null, user);
    });
    
    passport.deserializeUser(function(user, done) {
        done(null, user);
    });
    
    passport.use('local-employee', new LocalStrategy(
        function (username, password, done) {
            console.log(username, password);
            // get user from employee source
            user = {username, password, type: 'employee'};
            return done(null, user);
        }
    ));
    
    passport.use('local-customer', new LocalStrategy(
        function (username, password, done) {
            console.log(username, password);
            // get user from customer source
            user = {username, password, type: 'customer'};
            return done(null, user);
        }
    ));
    
    app.use(passport.initialize());
    app.use(passport.session());
    
    
    app.post('/employee/login',
        passport.authenticate('local-employee'),
        function (req, res) {
            res.json(req.user)
        });
    
    app.post('/customer/login',
        passport.authenticate('local-customer'),
        function (req, res) {
            res.json(req.user)
        });
    
    app.listen(3000)
    
    {
      "name": "passport-local",
      "version": "1.0.0",
      "description": "",
      "main": "index.js",
      "scripts": {
        "test": "echo \"Error: no test specified\" && exit 1"
      },
      "author": "",
      "license": "ISC",
      "dependencies": {
        "body-parser": "^1.19.0",
        "cookie-parser": "^1.4.5",
        "express": "^4.17.1",
        "express-session": "^1.17.2",
        "passport": "^0.4.1",
        "passport-local": "^1.0.0"
      }
    }