无法使用本地护照策略Nodejs v10.15.3成功注册

时间:2019-05-26 08:34:50

标签: node.js express authentication passport-local

我从头开始重新创建了项目,并遇到了相同的错误 这是我的passport.js //

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


passport.serializeUser(function(user, done){

  done(null, user.id);

});


passport.deserializeUser(function(id, done){
User.findById(id, function(err, user){
  done(err, user);

});

});
console.log(4);

passport.use('local.signup', new LocalStrategy({

usernameField: 'email',
passwordField: 'password',


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

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

     });

  }
)
}
));

// index.js

var express = require('express');
var router = express.Router();


var csrf = require('csurf');
var passport =require('passport');
var Product = require('../models/product');
var User = require('../models/user');
var csrfProtection = csrf({cookie: true});
router.use(csrfProtection);

/* GET home page. */
router.get('/', function(req, res, next) {

  Product.find(function(err, docs){
  var productChunks = [];
  var chunkSize= 3;

  for (var i = 0; i < docs.length; i+=chunkSize) {
   productChunks.push(docs.slice(i,i+ chunkSize));
  }
     res.render('shop/index', { title: 'Express' ,products : productChunks});
   });
});



router.get('/user/signup', function(req, res, next){
res.render('user/signup',{csrfToken: req.csrfToken()});

});

router.post('/user/signup', passport.authenticate('local.signup',{
successRedirect: '/user/profile',
failureRedirect: '/user/signup',
failureFlash: true

}));

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

});


module.exports = router;

// 用户模型架构

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

// app.js

var createError = require('http-errors');
var express = require('express');
var path = require('path');
var cookieParser = require('cookie-parser');
var logger = require('morgan');

var indexRouter = require('./routes/index');

var expressHbs = require('express-handlebars');
var mongoose = require('mongoose');
var session= require('express-session');
var passport = require('passport');
var flash = require('connect-flash');

var app = express();


mongoose.connect('mongodb://127.0.0.1:27017/shopping',{useNewUrlParser: true});
require('./config/passport');

// view engine setup
app.engine('.hbs',expressHbs({defaultLayout: 'layout', extname: '.hbs'}));
app.set('view engine', 'hbs');

app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());

app.use(session({secret: 'mysupersecret', resave: false, saveUninitialized: false}));
app.use(flash());
app.use(passport.initialize());
app.use(passport.session());

app.use(express.static(path.join(__dirname, 'public')));

app.use('/', indexRouter);

// catch 404 and forward to error handler
app.use(function(req, res, next) {
  next(createError(404));
});

// error handler
app.use(function(err, req, res, next) {
  // set locals, only providing error in development
  res.locals.message = err.message;
  res.locals.error = req.app.get('env') === 'development' ? err : {};

  // render the error page
  res.status(err.status || 500);
  res.render('error');
});

module.exports = app;

// 模板signup.hbs

<div class="wrapper fadeInDown">
  <div id="formContent">
    <!-- Tabs Titles -->

    <!-- Icon -->
    <div class="fadeIn first">
      <i class="fa fa-user signupicon" aria-hidden="true"></i>
    </div>

    <!-- Login Form -->
    <form class="" action="/user/signup" method="post">

        <input type="text" id="login" class="fadeIn second" name="login" placeholder="login">
        <input type="text" id="password" class="fadeIn third" name="login" placeholder="password">

<input type="hidden" name="_csrf" value="{{ csrfToken }}">

        <button class="btn btn-primary" type="submit">Login</button>

    </form>




    <!-- Remind Passowrd -->
    <div id="formFooter">
      <a class="underlineHover" href="#">Forgot Password?</a>
    </div>

  </div>
</div>

//

成功注册后,应将用户重定向到个人资料页面,但身份验证失败,并且在猫鼬数据库中找不到任何“用户”集合,但存在“产品”集合

0 个答案:

没有答案