2017-11-30 3 views
0

Iam erstellen App mit Node.js mit Passport-Version 0.4.0 für die Anmeldung. Aber meine Post-Methode funktioniert nicht korrekt, mein Benutzer speichert nicht in der Datenbank. Hier ist meine config/passport.js Datei ist:Nicht erfolgreich mit node.js Passport-Anmeldung

var passport = require('passport'); 
var User = require('../models/user'); 
var LocalStrategy = require('passport-local').Strategy; 

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

passport.deserializeUser((id, done) => { 
    User.findById(id, (err, user) =>{ 
     done(err, user); 
    }); 
}); 

passport.use('local.signup', new LocalStrategy({ 
    usernameField: 'email', 
    passwordField: 'password', 
    passReqToCallback: true 
}, function(req, email, password, done) { 
    User.findOne({'email': email}, function(err, user) { 
     if(err) { 
      return done(err); 
     } 
     if (user) { 
      return done(null, false, {message: 'Email is already used.'}); 
     } 
     var newUser = new User(); 
     newUser.email = email; 
     newUser.password = newUser.encryptPassword(password); 
     newUser.save(function(err, result) { 
      if (err) { 
       return done(err); 
      } 
      return done(null, newUser); 
     }); 
    }); 
})); 

In meiner Route/index.js Datei identifiziert ich meine Post und Methoden erhalten:

const express = require('express'); 
    const bodyParser = require('body-parser'); 
    const mongoose = require('mongoose'); 
    const csrf = require('csurf'); 
    var passport = require('passport'); 

const Products = require('../models/product'); 
const Users = require('../models/user'); 

const productRouter = express.Router(); 

const csrfProtection = csrf(); 
productRouter.use(csrfProtection); 

productRouter.use(bodyParser.json()); 
//Here my methods for product model 
......... 
......... 
productRouter.get('/user/signup', function(req, res, next) { 
    res.render('user/signup', {csrfToken: req.csrfToken()}); 
}); 

productRouter.post('/user/signup', passport.authenticate('local.signup', { 
    successRedirect: '/user/profile', 
    failureRedirect: '/user/signup', 
    failureFlash: true 
})); 

productRouter.get('/user/profile', function(req, res, next) { 
    res.render('user/profile'); 
}); 


module.exports = productRouter; 

Im in meiner app.js Datei Sitzung erforderlich, Pass und Blitz (app.js):

........ 
var session = require('express-session'); 
var passport = require('passport'); 
var flash = require('connect-flash'); 

Dann nach dem Anschluss, ich meine config/Pass-Datei benötigen:

const mongoose = require('mongoose'); 
mongoose.Promise = require('bluebird'); 

const Products = require('./models/product'); 
const User = require('./models/user'); 

const url = 'mongodb://localhost:27017/mystore'; 
const connect = mongoose.connect(url, { 
    useMongoClient: true 
}); 

connect.then((db) => { 
    console.log('Connected correctly to server'); 
}, (err) => { console.log(err); }); 

require('./config/passport'); 

Im eine signup.hbs Vorlage erstellt:

<form class="form" role="form" 
action="/user/signup" method="post"> 
      <div class="form-group"> 
      <label for="email">Email</label> 
      <input type="email" class="form-control" id="email" placeholder="[email protected]" required=""> 
     </div> 
      <div class="form-group"> 
      <label for="password">Password</label> 
      <input type="password" class="form-control" id="password" placeholder="password" required=""> 
      </div> 
       <input type="hidden" name="_csrf" value="{{ csrfToken }}"> 
      <div class="form-group"> 
       <button type="submit" class="btn btn-success btn-lg float-right">Register</button> 
      </div> 
    </form> 

Im korrekt auf den lokalen Host verbunden: 3000/user/Anmeldungen, aber nach der Form nichts einreichen passiert und mein Benutzer Sammlung ist leer.

Und natürlich meine Modelle/user.js Modell:

var mongoose = require('mongoose'); 
var Schema = mongoose.Schema; 
var bcrypt = require('bcrypt-nodejs'); 


var userSchema = new Schema({ 
    email: { 
     type: String, 
     required:true 
    }, 
    password: { 
     type: String, 
     required: true 
    } 
}); 

userSchema.methods.encryptPassword = function(password) { 
    return bcrypt.hashSync(password, bcrypt.genSaltSync(5), null); 
}; 

userSchema.methods.validPassword = function(password) { 
    return bcrypt.compareSync(password, this.password); 
};  

module.exports = mongoose.model('User', userSchema); 

Irgendwelche Ideen, wo im falschen? sehr geschätzt.

Antwort

0

Noob hier, aber ermöglicht Lenker Ihnen Form-Post ohne Namensattribute in Ihren Eingaben, haben Sie validiert durch Chrom-Inspektor, die gesendet werden?

Verwandte Themen