2017-11-30 5 views
0

등록을 위해 Passport 버전 0.4.0을 사용하는 Node.js가있는 건물 앱. 하지만 내 게시물 메서드가 제대로 작동하지 않는, 내 사용자가 데이터베이스에 저장하지 않습니다. 여기 내 설정/passport.js 파일입니다, 내 app.js 파일 세션에서node.js와 함께 실패 Passport signup

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; 

임 필요 : 내 경로 /하는 index.js 파일에서

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

난 내 게시물을 식별 방법을 얻을 여권 및 플래시 (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'); 

그런 다음 연결 한 후, 난 내 설정/여권 파일이 필요

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

임 제대로 로컬 호스트에 연결 :

임은 signup.hbs 템플릿 생성 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

여기는 멍청하지만 핸들 막대를 사용하면 입력 사항에 이름 속성이없는 양식을 게시 할 수 있습니다. 크롬 관리자를 통해 전송 된 것으로 확인 했습니까?

관련 문제