2017-02-28 66 views
0

我试图建立护照本地登录,但提交表单时没有做任何事情。Node.js的app.post护照本地注册形式不工作

我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.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表单:

<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> 

当我填写用户名和密码,没有打印出到从控制台发布请求。我有什么错误?

+0

请查看http://passportjs.org/docs/username-password – unlimit

回答

0

我发现,除去该AMP js脚本解决问题访问数据。出于某种原因,它打破了发布请求。

<script async src="https://cdn.ampproject.org/v0.js"></script> 
1

您必须序列化和反序列化的用户信息进行认证的用户。

这里是和榜样。

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'); 
} 

,一旦你做的序列化,你必须的过程实际上也适用于路由器。即使用户的详细信息进入护照。

在你的路由器的文件:

const passportConfig = require('services.js'); 

然后,你可以简单地通过req.user

+0

我曾尝试复制护照文档中的代码,但我认为我的问题还没有出现。我在调试中删除了大部分代码,我想我的观点是为什么在填写并提交表单时,此行不显示任何内容? app.post('/ login',function(req,res){console.log(“body parsing”,req.body)}); –