护照 js 中的 flash 消息
flash message in passport js
我对即显消息有疑问。我的页面上没有收到错误消息。请告诉我哪里出错了。
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);
};
护照-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')
});
我对即显消息有疑问。我的页面上没有收到错误消息。请告诉我哪里出错了。
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);
};
护照-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')
});