Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How Should i get validation errors with sequelize and passport on login

i'm already set validate in User Model. My Route Code is like this where I'm trying for validate.

var express = require('express');
var loginRouter = express.Router();
var passport = require('passport');
var User = require('../app/models/model')().User;

module.exports = function() {

    var loginController = require('../controller/loginController')();

    loginRouter.get('/login',loginController.getLogin);
    loginRouter.post('/login',
        function (req, res, next) {

            User.validate().success(function () {
              next(); // only call next if validation passes
            }).error(function (error) {
                console.log(error);
              res.redirect('/auth/login');
              // or res.send({error: true}) or res.redner( ... )
            })

        },
        passport.authenticate('local-login',{   
                successRedirect: '/dashboard',
                failureRedirect: '/auth/login',
                failureFlash : true
            }
        ));

    return loginRouter;

};

User.js

var Sequelize = require('sequelize');

var attributes = {
    username:
    {
        type: Sequelize.STRING,
        field: 'username',
        validate: {
            notNull: true,
        }
    },
    password:
    {
        type: Sequelize.STRING,
        field: 'password',
        validate: {
            notNull: true,
        }
    }
}

var options = {
    freezeTableName: true,
    timestamps: false
}

module.exports.attributes = attributes;
module.exports.options = options;

model.js

var Sequelize = require('sequelize')
    config = require('../../config/config').database;

module.exports = function(){

    var sequelize = new Sequelize(config.database,config.username,config.password,config.options);

    var UserMeta = require('./User');
    var User = sequelize.define('users',UserMeta.attributes,UserMeta.options);

    return {
        User: User
    }
};

so i don't know what i'm doing wrong here or which thing i forgot. so any idea about it?

like image 725
utsav Avatar asked Nov 27 '25 22:11

utsav


1 Answers

That's almost good, the only thing you should know is when you call next(), express will pass the request to the next handler, which is passportjs authentication function.

You can do as you wish with req and res. If the request does not pass the validation criteria, you can send errors or render a another page, like a normal response. But do not call next() in those cases.

Depending on your implementation, your code might look like this:

loginRouter.post('/login',
    function (req, res, next) {
        //here to get validation error
        User.validate().success(function () {
          next(); // only call next if validation passes
        }).error(function () {
          res.redirect('/auth/login');
          // or res.send({error: true}) or res.redner( ... )
        })
    },
    passport.authenticate('local-login',{   
            successRedirect: '/dashboard',
            failureRedirect: '/auth/login',
            failureFlash : true
        }
    ));
like image 99
Aᴍɪʀ Avatar answered Nov 29 '25 14:11

Aᴍɪʀ



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!