Ham*_*dwn 5 node.js express passport-local passport.js
我已经创建了登录并注册了 Express 和 Passport js。我想添加错误密码或电子邮件的消息。
在我的 index.js (main) 中添加了护照和正文解析器中间件,并引用了路由:
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());
// route files
let index = require("./routes/index");
let auth = require("./routes/auth");
app.use("/", index);
app.use("/auth", auth);
Run Code Online (Sandbox Code Playgroud)
我创建了护照配置:
const LocalStrategy = require("passport-local").Strategy;
const User = require("../models/User");
const config = require("../config/database");
const bcrypt = require("bcryptjs");
module.exports = function(passport) {
// Local Strategy
passport.use(
new LocalStrategy(
{
usernameField: "email",
passwordField: "password"
},
(username, password, done) => {
// Match Email
let query = { email: username };
User.findOne(query, function(err, user) {
if (err) throw err;
if (!user) {
return done(null, false, { message: "No user found" });
}
// Match Password
bcrypt.compare(password, user.password, function(err, isMatch) {
if (err) throw err;
if (isMatch) {
return done(null, user);
} else {
return done(null, false, { message: "Wrong password" });
}
});
});
}
)
);
passport.serializeUser(function(user, done) {
done(null, user.id);
});
passport.deserializeUser(function(id, done) {
User.findById(id, function(err, user) {
done(err, user);
});
});
};
Run Code Online (Sandbox Code Playgroud)
还为它添加了一条路线:
// Login Process
router.post("/login", (req, res, next) => {
passport.authenticate("local", {
successRedirect: "/",
failureRedirect: "/auth/login",
failureFlash: true
})(req, res, next);
});
Run Code Online (Sandbox Code Playgroud)
successRedirect 和 failureRedirect 工作正常,但它没有给我任何错误。我在视频中的 youtube 视频上做了它,但在我的代码中却没有。
连接闪存的配置:
const flash = require("connect-flash");
app.use(require("connect-flash")());
Run Code Online (Sandbox Code Playgroud)
你的代码没有问题,只是你使用的express版本不同。从 Passportjs Flash 消息文档中,
注意:使用 flash 消息需要req.flash()函数。Express 2.x 提供了此功能,但已从 Express 3.x 中删除。使用 Express 3.x 时,建议使用 connect-flash 中间件来提供此功能。
因此,您需要按照推荐安装connect-flash Express 中间件。
var flash = require('connect-flash');
var app = express();
app.configure(function() {
app.use(express.cookieParser('keyboard cat'));
app.use(express.session({ cookie: { maxAge: 60000 }}));
app.use(flash());
});
Run Code Online (Sandbox Code Playgroud)
使用 flash 中间件后,所有请求都将具有可用于 flash 消息的 req.flash() 函数。
app.get('/flash', function(req, res){
req.flash('info', 'Flash is back!')
res.redirect('/');
});
app.get('/', function(req, res){
res.render('index', { messages: req.flash('info') });
});
Run Code Online (Sandbox Code Playgroud)
这可能对你有帮助。
| 归档时间: |
|
| 查看次数: |
3848 次 |
| 最近记录: |