Javascript Passport无法使用模块化Express应用程序
因此,我正在尝试使用模块化目录结构设置一个半RESTful Express应用程序 我首先在Vimeo()上观看TJ的视频,介绍如何设置模块化express应用程序。我真的很喜欢他做这件事的方式,并且想扩展一个应用程序 问题是,我认为Passport.js由于他正在进行的模块化设置,使它处理身份验证的方式变得混乱。因为如果我使用另一个模块化程度较低的目录结构,Express应用程序运行良好 如果我按照他的步骤,尝试集成Passport.js,视图呈现良好,但是如果我尝试注册一个新用户,当POST请求传递到我所做的用户控制器时,我会得到一个非常奇怪的错误:Javascript Passport无法使用模块化Express应用程序,javascript,node.js,authentication,express,passport.js,Javascript,Node.js,Authentication,Express,Passport.js,因此,我正在尝试使用模块化目录结构设置一个半RESTful Express应用程序 我首先在Vimeo()上观看TJ的视频,介绍如何设置模块化express应用程序。我真的很喜欢他做这件事的方式,并且想扩展一个应用程序 问题是,我认为Passport.js由于他正在进行的模块化设置,使它处理身份验证的方式变得混乱。因为如果我使用另一个模块化程度较低的目录结构,Express应用程序运行良好 如果我按照他的步骤,尝试集成Passport.js,视图呈现良好,但是如果我尝试注册一个新用户,当POST
crypto.js:599
return binding.PBKDF2(password, salt, iterations, keylen, digest, callback
^
TypeError: Not a buffer
at TypeError (native)
at pbkdf2 (crypto.js:599:20)
at Object.exports.pbkdf2 (crypto.js:585:10)
at Object.ondone (/home/karysto/Desktop/modular-multiblog/node_modules/passport-local-mongoose/lib/passport-local-mongoose.js:71:20)
我真的很困惑为什么会发生这种情况,但我有充分的理由相信是模块化设置导致了这种情况
这是我的users
controller.js文件:
const
User = require('./model'); // including the user model
exports.index = function(req, res) {
User.find(function(err, users) {
if (err) throw err;
return res.status(200).json(users);
});
};
exports.show = function(req, res) {
User.find(req.param.id, function(err, user) {
if (err) throw err;
return res.status(200).json(user);
});
};
exports.create = function(req, res) {
User.register( new User({ username: req.body.username, password: req.body.password}), function(err, user) {
if (err) {
return res.render('users/register', { info: "Sorry. That username already exists. Try again." });
};
// successful account creation, redirect to profile route.
passport.authenticate('local')(function (req, res) {
return res.render('users/show', {
user: req.user
});
});
});
};
exports.new = function(req, res) {
return res.render('users/register');
};
exports.login = function(req, res) {
if (req.user) {
res.render('users/show', {
user: req.user
});
}
else {
res.render('users/login');
}
};
exports.logout = function(req, res) {
req.logout();
return res.render('static_pages/index');
};
这是我的users
route.js文件:
const
controller = require('./controller')
, express = require('express')
, router = express.Router()
, passport = require('passport');
router.post('/register', controller.create);
router.get('/register', controller.new);
router.post('/login', passport.authenticate('local'), controller.login);
router.get('/login', controller.login);
router.get('/logout', controller.logout);
router.get('/:id', controller.show);
router.get('/', controller.index);
module.exports = router;
用户
模型也没有什么特别之处:
const
mongoose = require('mongoose')
, passportLocalMongoose = require('passport-local-mongoose');
const User = new mongoose.Schema({
username: String,
password: String
});
// Adds the User model to the mongodb schema and passport model.
// Allows the methods .register to be added for this schema.
User.plugin(passportLocalMongoose);
module.exports = mongoose.model('User', User);
如果有帮助,我的应用程序目录结构如下:
api/app.js bin/makefile package.json public/README routes/test/views/
应用程序的其余部分,以及每个目录的文件,我省略了公共目录,因为它目前未被使用:
/api:
发布/静态页面/用户/
/api/职位:
controller.js model.js routes.js
/api/静态页面:
controller.js routes.js
/api/用户:
controller.js model.js routes.js
/箱:
www
/路线:
index.js users.js
/测试:
test.user.js
/观点:
error.jade index.jade layout.jade posts/static\u pages/users/
/视图/静态页面:
关于.jade contact.jade index.jade
/视图/用户:
login.jade register.jade show.jade
您没有提到遇到了什么错误?是我吗?就在这篇文章的开头。这是crypto.js 599
错误,是第一块降价代码。你链接的视频已经有两年了,从那以后发生了很多变化。这可能需要一些认真的调试,我建议您共享一个github repo,以便更容易诊断。如果你不喜欢使用Passport和MongoDB,我建议你。免责声明:我在那里工作,我管理Node.js集成:)