express - Passport js中的闪现消息

标签 express pug passport.js connect-flash

我在闪现消息方面遇到问题。我的页面上没有收到错误消息。请告诉我错误在哪里。

PS。抱歉我的英语不好;D

app.js

要求:express、passport、pug、express-session、cookie-parser、connect-flash、body-parser...

var router = require('./router.js')(passport);
var initPassport = require('./passport-init.js');

var app = express();

app.set('views', __dirname + '/views');
app.set('view engine', 'pug');

app.use(cookieParser('secret'));
app.use(session({ cookie: { maxAge: 60000 }, secret: 'secret' }));
app.use(flash());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(passport.initialize());
app.use('/', router);

initPassport(passport);

router.js

var express = require('express');
var router = express.Router();

module.exports = function(passport) {

    router.get('/', function(req, res) {
       res.render('index', {
           title: 'index page'
       });
    });

    router.post('/auth',        
       passport.authenticate('local', {         
           successRedirect: '/',
           failureRedirect: '/',
           failureFlash: true
       })
    );

   return (router);
};

passport-init.js

var User = require('./user.js');
var LocalStrategy = require('passport-local').Strategy;

module.exports = function(passport) {

    passport.use('local', new LocalStrategy({ usernameField: 'email', passwordField: 'pass', passReqToCallback: true },

        function(email, pass, done) {
            User.findOne({ where: { email: email } }).then(function(err, user) {
                if (err) {
                    return done(err);
                }
                if (!user) { return done(null, false, { message: 'Incorrect username.' });
                }
                if (!user.validPassword(pass)) { return done(null, false, { message: 'Incorrect password.' });
                }
                return done(null, user);
            });
        }
    ));
};

index.pug

include ./headers.pug

div(class="container")
    div(class="row head")
        div(class="col-xs-12")
            if message
                    p #{message}

    div(class="row body-left")
        div(class="col-xs-3")
            include ./auth.pug
        div(class="col-xs-9")

最佳答案

请记住,app.VERB('route',callback)是针对相应的HTTP请求实现的,例如app.get('/',callback)是针对根目录的GET请求执行的。 app.use() 的工作方式相同,但不同之处在于它是针对所有请求实现的,无论路径如何。

这意味着您仅将 Express 应用程序配置为对所有请求使用 flash(),但您实际上并未告诉 flash 何时闪现消息。

Connect flash 使 request flash() 方法在请求上使用时可用,该方法是我们用来刷新错误的方法。

要在注册页面中显示错误消息,当发生错误时,您可以将以下内容放入 HTTP 请求回调中:

res.render('signup', {
    title: 'Sign-up Form',
    messages: req.flash('error')
});

关于express - Passport js中的闪现消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42468989/

相关文章:

node.js - 使用 jade 模板引擎从文件系统刷新 Node.js 中的信息

javascript - 在 Passport.authenticate() 内部重定向时出现问题

javascript - socket.io 函数在回调完成之前返回 - Node.js

node.js - 安装 npm install express code UNABLE_TO_VERIFY_LEAF_SIGNATURE 时 Node js 错误无法验证第一个证书

javascript - 绑定(bind) `this` 到 `call` 不起作用

javascript - Jade 中生成的属性

javascript - 重叠头像 : convert SCSS to CSS and PUG to HTML

node.js - 如何在 node.js http.request 中发布 XML 数据

node.js - 使用 Next.JS、Express 和 Passport 进行用户身份验证的简单示例

javascript - 在 Node.js 中无需重启服务器即可更新文件