2017-11-30 15 views
0

Passportバージョン0.4.0を使用してNode.jsを使用してサインアップするIamビルディングアプリ。しかし、私のポストメソッドは正しく動作しません、私のユーザーはデータベースに保存しません。私のルート/ index.jsファイルでnode.jsで失敗するPassportサインアップ

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

私は私のポストを特定し、メソッドを取得します:ここに私のconfig/passport.jsファイルがある私のapp.jsファイルセッションに必要な

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; 

イム、パスポートとフラッシュ(app.js):

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'); 
0:

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

次に接続した後、私は私のconfig /パスポートファイルが必要

Imがsignup.hbsテンプレートを作成しました:

<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が正しくローカルホストに接続されている:3000 /ユーザー/サインアップが、フォームの何も提出しなかった後起こったと私のユーザーコレクションは空です。

そしてもちろん、私のモデルは/ user.jsのモデル:

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

イム間違っている任意のアイデア? 非常に高く評価されています。

答えて

0

ここにNoobがありますが、ハンドルバーはあなたの入力に名前属性を持たずに投稿することができます。あなたは送信されたものをクロムインスペクタで検証しましたか?

関連する問題