node.js - 我应该如何在登录时收到 sequelize 和 passport 的验证错误

标签 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;

};

用户.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;

模型.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
    }
};

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

最佳答案

差不多就好了,你唯一需要知道的是当你调用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
        }
    ));

关于node.js - 我应该如何在登录时收到 sequelize 和 passport 的验证错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34498901/

相关文章:

node.js - 在放入 Mongoose 之前检查集合是否存在

node.js - 无法使用sendgrid发送电子邮件

node.js - Mongoose 填充在 2 个数据库中

javascript - 如何将mysql查询转换为sequelize orm

node.js - 重命名 Sequelize 迁移表

node.js - 如何使用 "Non Atomic"批处理/管道在 Scylla 中运行多个查询

angularjs - oauth 回调后 Passport session 消失

javascript - 如何在 NodeJS/ExpressJS/Passport 中显示登录的用户名?

node.js - ExpressJS + Sequelize er_bad_field_error : Unknown column in fieldlist

javascript - Passport.js、express.js - 在 oauth 后返回同一页面