passport本地注册表单的Node.js app.post不起作用
我正在尝试设置passport本地登录,但表单在提交时没有任何作用 My app.js代码:passport本地注册表单的Node.js app.post不起作用,node.js,passport.js,passport-local,Node.js,Passport.js,Passport Local,我正在尝试设置passport本地登录,但表单在提交时没有任何作用 My app.js代码: var express = require('express'); var app = express(); app.use(express.static(__dirname + '/public')); var credentials = require('./credentials.js'); app.use(require('cookie-parser')(credentials.cookieS
var express = require('express');
var app = express();
app.use(express.static(__dirname + '/public'));
var credentials = require('./credentials.js');
app.use(require('cookie-parser')(credentials.cookieSecret));
app.use(require('body-parser').urlencoded({extended: false}));
var session = require('express-session');
app.use(session({
resave: false,
saveUninitialized: true,
secret: 'keyboard cat'
}));
var passport = require('passport');
app.use(passport.initialize());
app.use(passport.session());
app.disable('x-powered-by');
var handlebars = require('express-handlebars').create({defaultLayout:'main'});
app.engine('handlebars', handlebars.engine);
app.set('view engine', 'handlebars');
app.set('port', process.env.PORT || 3000);
app.post('/login', function(req, res){console.log("body parsing", req.body)});
app.get('/login', function(req, res) {
res.render('login');
});
登录的html/login表单:
<form action="/login" method="post">
<div>
<label>Username:</label>
<input type="text" name="username"/>
</div>
<div>
<label>Password:</label>
<input type="password" name="password"/>
</div>
<div>
<button type="submit">Submit</button>
</div>
</form>
用户名:
密码:
提交
当我填写用户名和密码时,post请求不会向控制台输出任何内容。有什么不对吗?您必须对用户详细信息进行序列化和反序列化,才能对用户进行身份验证 下面是一些例子 services.js
const passport = require('passport');
const LocalStrategy = require('passport-local').Strategy;
const User = require('../models/user');
//serialize and deserialize
passport.serializeUser(function(user, done) {
done(null, user._id);
});
passport.deserializeUser(function(id, done) {
User.findById(id, function(err, user) {
done(err, user);
});
});
//middleware
passport.use('local-login', new LocalStrategy({
usernameField: 'email',
password: 'password',
passReqToCallback: true
}, (req, email, password, done) => {
User.findOne({ email: email.toLowerCase() }, function(err, user) {
if (err) return done(err);
if (!user) {
return done(null, false, req.flash('loginMessage', 'No user has been found'));
}
if (!user.comparePassword(password)) {
return done(null, false, req.flash('loginMessage', 'Oops! Wrong Password.'));
}
return done(null, user);
});
}));
//custom function to validate
exports.isAuthenticated = function(req, res, next) {
if (req.isAuthenticated()) {
return next();
}
res.redirect('/login');
}
一旦你做了序列化,你必须把这个过程应用到路由器上。i、 e、将用户详细信息输入passport
在路由器文件中:
const passportConfig = require('services.js');
然后您可以通过
req.user
访问数据。我发现删除这个AMP js脚本可以解决这个问题。出于某种原因,它破坏了post请求
<script async src="https://cdn.ampproject.org/v0.js"></script>
请查看我已尝试从passport文档中复制代码,但我认为我的问题尚未解决。我在调试中删掉了大部分代码,我想我的重点是,为什么在填写和提交表单时,这一行不打印任何内容?app.post('/login',函数(req,res){console.log(“body解析”,req.body)});