gpt4 book ai didi

javascript - 无法读取 null + passport.js 的属性 'body'

转载 作者:行者123 更新时间:2023-11-30 00:05:59 27 4
gpt4 key购买 nike

我正在尝试在 Node/Express/Sequelize 应用程序中实现 passport.js。我试图尽可能忠实于the official documentationScotch.io tutorial , 目前在我的脚手架中有以下相关代码段:

应用程序.js

const express = require('express');
const http = require('http');
const https = require('https');
const sequelize = require('sequelize');
const db = require('./config/sequelize');
const config = require('./config/config');
const passport = require('./config/passport');

const app = express();

const port = 3000;

app.use(passport.initialize());
app.use(passport.session());
app.set('view engine', 'ejs');

app.listen(port);

app.post('/signup', passport.authenticate('local', function(req, res, next, err){
if (err) { console.log(err); }
res.json(req.body);
}));

./config/passport.js

const db = require('./sequelize');

const passport = require('passport'),
LocalStrategy = require('passport-local').Strategy;

passport.serializeUser(function(user, done) {
done(null, user.id);
});

passport.deserializeUser(function(user, done) {
db.User.findById(id, function(err, user) {
done(err, user);
});
});

passport.use('local', new LocalStrategy({
usernameField : 'email',
passwordField : 'password',
passReqToCallback : true
},
function(email, password, done){
process.nextTick(function() {
db.User.findOne({ email : 'local.email' }, function(err, user) {
if (err)
return done(err);
if (user) {
return done(null, false, req.flash('signupMessage', 'That email is already taken.'));
}
else {
db.User.create({
username: 'local.email',
password: 'local.password'
});
}
});
});
}
));

module.exports = passport;

./views/signup.ejs

<!-- LOGIN FORM -->
<form action="/signup" method="post">
<div class="form-group">
<label>Email</label>
<input type="text" name="username">
</div>
<div class="form-group">
<label>Password</label>
<input type="password" name="password">
</div>

<button type="submit">Signup</button>
</form>

有了这个实现,我启动了应用程序,输入电子邮件地址和密码以在 ./views/signup.ejs 上注册,然后出现以下错误:

TypeError: Cannot read property 'body' of null
at C:\Users\Adam\Desktop\repos\chinese-democracy\app.js:45:15
at allFailed (C:\Users\Adam\Desktop\repos\chinese-democracy\node_modules\passport\lib\middleware\authenticate.js:94:18)
at attempt (C:\Users\Adam\Desktop\repos\chinese-democracy\node_modules\passport\lib\middleware\authenticate.js:167:28)
...

这表明 req.body 返回为 null,我怀疑它与 ./config/passport.js 中定义 deserializeUser 和 serializeUser 函数的方式有关,但我如何才能得到详细的错误输出以确定确切原因是什么?此外,我已经对我的 Sequelize 数据库进行了完整性 CRUD 检查,因此我省略了该文件,但如果你们认为这有助于解决此问题,我会将其作为编辑提供。

最佳答案

请在您的 app.js 中尝试:

app.post('/signup', passport.authenticate('local'), function(req, res, next, err){
//^ close
// If this function gets called, authentication was successful.
res.redirect('/users/' + req.user.username);
});

如果您需要自定义回调:

app.post('/signup', function(req, res, next){
passport.authenticate('local', function(err, user, info) {
//Your code here
})(req, res, next);
});

请引用http://passportjs.org/docs/authenticate了解更多详情。

关于javascript - 无法读取 null + passport.js 的属性 'body',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38545908/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com