2017-02-28 3 views
0

Ich versuche, Passport lokale Anmeldung einzurichten, aber das Formular tut nichts, wenn eingereicht.Node.js App.post für Passport-lokalen Anmeldeformular funktioniert nicht

Mein app.js Code:

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

Die Form html bei/login für Sign-In:

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

Als ich in Benutzername und Passwort fülle nichts ausdruckt in die Konsole aus dem Anfrage senden Was habe ich falsch?

+0

Bitte prüfe http://passportjs.org/docs/username-password – unlimit

Antwort

0

Ich fand, dass dieses AMP js Skript zu entfernen, das Problem löst. Aus irgendeinem Grund bricht es die Postanfragen.

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

Sie müssen die Benutzerdetails serialisieren und deserialisieren, damit der Benutzer authentifiziert wird.

Hier ist und Beispiel.

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

und sobald Sie die Serialisierung zu tun, müssen Sie den Prozess tatsächlich an den Router an. D. h., geben Sie die Benutzerdetails ein, um den Pass einzugeben.

In Ihrem Router-Datei:

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

Dann greifen Sie können die Daten einfach über req.user

+0

Ich habe versucht, den Code aus der Pass-Dokumentation zu kopieren, aber ich glaube nicht, mein Problem dort noch ist. Ich habe den Großteil des Codes im Debugging ausgeschnitten, und ich denke, der Punkt, an dem ich mich befinde, ist, warum diese Zeile nichts ausdruckt, wenn das Formular ausgefüllt und übergeben wird? app.post ('/ login', Funktion (req, res)) {console.log ("body analysing", req.body)}); –