2017-02-28 15 views
0

パスポートローカルサインインをセットアップしようとしていますが、フォームは送信時に何もしません。Passport-Localサインアップフォームの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( "ボディ解析"、req.body)}); –

関連する問題