如何在登录时使用sequelize和护照获得验证错误

时间:2015-12-28 18:40:01

标签: node.js passport.js sequelize.js

我已经在用户模型中设置了验证。 我的路线代码是这样的,我试图验证。

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
    }
};

所以我不知道我在这里做错了什么,或者我忘记了什么。 所以对它有任何想法吗?

1 个答案:

答案 0 :(得分:1)

这几乎是好的,你应该知道的唯一一件事是当你打电话给next()时,express会将请求传递给下一个处理程序,这是passportjs身份验证功能。

您可以reqres按照自己的意愿执行操作。如果请求未通过验证标准,您可以发送错误或呈现另一个页面,如正常响应。但在这些情况下不要致电next()

根据您的实现,您的代码可能如下所示:

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
        }
    ));