我已经在用户模型中设置了验证。 我的路线代码是这样的,我正在尝试验证。
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认证函数。
你可以用req
和res
做你想做的事。如果请求未通过验证标准,您可以发送错误或呈现另一个页面,就像正常响应一样。但在这些情况下不要调用 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/