我应该如何在登录时使用续集和护照获得验证错误

Posted

技术标签:

【中文标题】我应该如何在登录时使用续集和护照获得验证错误【英文标题】:How Should i get validation errors with sequelize and passport on login 【发布时间】:2016-04-02 14:53:23 【问题描述】:

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

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;

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】:

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

【讨论】:

not woking 我收到此错误“TypeError: User.validate is not a function”。我正在使用续集 v3.15.1。 @utsav 你能用你定义用户的那部分代码更新你的问题吗? @utsav 你如何验证用户?打电话给.validate()? 好的,我更新了代码,我试图验证它。并感谢您的支持。

以上是关于我应该如何在登录时使用续集和护照获得验证错误的主要内容,如果未能解决你的问题,请参考以下文章

如何修复阻止注册用户登录的护照本地身份验证错误

护照后如何使用承诺登录。通过社会服务进行身份验证。 KeystoneJS + 护照

使用 Passport 进行社交身份验证登录后如何重定向到个人资料页面? (角度,快递,护照,jwt)

如何使用护照在我的 node.js 服务器上验证 android 应用程序的 GPGS 令牌

如何解决护照认证产生的错误

节点护照错误:未知身份验证策略“本地登录”