등록을 위해 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);
모든 아이디어를 어디에서 메신저 잘못? 많은 감사드립니다.