Passport-local: Lain ~ Satu-satunya masalah kredensial yang hilang: D

Dibuat pada 25 Des 2017  ·  11Komentar  ·  Sumber: jaredhanson/passport-local

Apakah bagian ini, yang di passport.js, salah?

 router.post('/login', function(req, res, next) {
   passport.authenticate('local', {
     sucessRedirect: '/',
     failureRedirect: '/users/login',
     failureFlash: true
   })(req, res, next)
 })

paspor.js

const LocalStrategy = require('passport-local').Strategy;
const User = require('../models/user')
const config = require('../config/database');
const bcrypt = require('bcryptjs')


module.exports = function(passport) {
  // Local Strategy
  passport.use(new LocalStrategy(function(username, password, done) {
    //Match Username
    let query = {
      username: username
    };
    User.findOne(query, function(err, user) {
      if (err) throw err;
      if (!user) {
        return done(null, false, {
          message: 'No User Found'
        })
      }

      //Match Password
      bcrypt.compare(password, user.password, function(err, isMatch) {
        if (err) throw err;
        if (isMatch) {
          return done(null, user);

        } else {
          return done(null, false, {
            message: 'Wrong password'
          })
        }
      });


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

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




  }))
}

pengguna.js

const express = require('express')
const router = express.Router();
const bcrypt = require('bcryptjs')
const passport = require('passport')

let User = require('../models/user')


// Register form
router.get('/register', (req, res) => {
  res.render('register');
});
//Login Redirect Page
// router.post('/register', function(req, res) {
//
//     }


//REGISTER Proccess
router.post('/register', function(req, res) {
  const name = req.body.name;
  const email = req.body.email;
  const username = req.body.username;
  const password = req.body.password;
  const password2 = req.body.password2;

  req.checkBody('name', 'Name is required').notEmpty();
  req.checkBody('email', 'Email is required').notEmpty();
  req.checkBody('email', 'Email is not valid').isEmail();
  req.checkBody('username', 'Username is required').notEmpty();
  req.checkBody('password', 'Password is required').notEmpty();
  req.checkBody('password2', 'Password do not match').equals(req.body.password);
  let errors = req.validationErrors();

  if (errors) {
    res.render('register', {
      errors: errors
    })
  } else {
    let newUser = new User({
      name: name,
      email: email,
      username: username,
      password: password
    })

    bcrypt.genSalt(10, function(err, salt) {
      bcrypt.hash(newUser.password, salt, function(err, hash) {
        if (err) {
          console.log(err);
        }
        newUser.password = hash;
        newUser.save(function(err) {
          if (err) {
            console.log(err);
            return;
          } else {
            req.flash('success', 'You are Now registered and can log in');
            res.redirect('/users/login');
          }
        })
      });
    })
  }
})




//Form of Login
router.get('/login', function(req, res) {
  res.render('login');
})

//Login Proccess
//router.post('/login',passport.authenticate('local', { successRedirect: '/',
//                                   failureRedirect: '/users/login',
//                                   failureFlash: true })
//);

 router.post('/login', function(req, res, next) {
   passport.authenticate('local', {
     sucessRedirect: '/',
     failureRedirect: '/users/login',
     failureFlash: true
   })(req, res, next)
 })
module.exports = router;


app.js

const express = require('express');
const path = require('path')
const mongoose = require('mongoose');
const bodyParser = require('body-parser')
const expressValidator = require('express-validator');
const flash = require('connect-flash')
const session = require('express-session')
const passport = require('passport');
const config = require('./config/database')


//init libraries
mongoose.Promise = global.Promise;
var promise = mongoose.connect((config.database), {
  useMongoClient: true,
});
let db = mongoose.connection;
// mongoose.Promise = global.Promise;
// mongoose.connect('mongodb://10.7.0.3:27107/data/db');

//Check connection
db.once('open', function() {
  console.log('Connected to MongoDB')
})

//Check for DB errors
db.on('error', function(err) {
  console.log(err)
})

//init app
const app = express();

//Bring in Models
let Article = require('./models/article')

// parse application/x-www-form-urlencoded
app.use(bodyParser.urlencoded({
  extended: false
}))


// parse application/json
app.use(bodyParser.json())


//Set Public Folder
app.use(express.static(path.join(__dirname, 'public')))

//Express Session MiddleWare
app.use(session({
  secret: 'keyboard cat',
  resave: true,
  saveUninitialized: true,
  cookie: {}
}))

//EXpress Message Middleware
app.use(require('connect-flash')());
app.use(function(req, res, next) {
  res.locals.messages = require('express-messages')(req, res);
  next();
});

//Express Validator Middleware
app.use(expressValidator({
  errorFormatter: function(param, msg, value) {
    var namespace = param.split('.'),
      root = namespace.shift(),
      formParam = root;

    while (namespace.length) {
      formParam += '[' + namespace.shift() + ']';
    }
    return {
      param: formParam,
      msg: msg,
      value: value
    };
  }
}));

//Passport config
require('./config/passport')(passport);
app.use(passport.initialize());
app.use(passport.session());


// load View Engine
// let Article = require('../models/article')
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'pug');
// Home Route
app.get('/', function(req, res) {
  Article.find({}, function(err, articles) {
    if (err) {
      console.log(err);
    } else {
      res.render('index', {
        title: "Blog",
        articles: articles
      })
    }
  })
})

//Route Files
let articles = require('./routes/articles');
// let users = require('.routes/users');
let users = require('./routes/users');
app.use('/users', users)
app.use('/articles', articles)

// Start Server
app.listen(3000, function(req, res) {
  console.log("it is on 3000 now")

})

Satu hal lagi, file database.js ini ada di folder config
untuk apa rahasia variabel itu? Kata orang bisa apa saja.
database.js

module.exports = {
  database: 'mongodb://localhost:27017/nodekb',
  secret: 'anything'
}

Komentar yang paling membantu

Sejauh ini, dalam kasus saya hanya meneruskan ini ke dalam strategi lokal karena saya memiliki bidang bernama khusus...

    {
      usernameField: "name",
      passwordField: "password",
      passReqToCallback: true,
    }

Semua 11 komentar

Apakah Anda pernah dapat memperbaiki ini?

Satu lagi membenturkan kepala ke dinding...

Pertanyaan bagus! @MauriceMorrey @Croma1994
Saya ingat saya memperbaikinya. Tetapi jika Anda melihat tanggalnya, apakah Anda masih ingat bagaimana cara memperbaikinya jika itu Anda? Tapi jangan khawatir! Solusinya harus di repo GitHub saya karena saya biasanya mengunggah hampir semua yang saya lakukan. Jadi solusinya sejauh ini adalah menemukan potongan kode yang sama di Github saya, dan Anda akan melihat solusi tetap.

Sejauh ini saya tidak ingin menghabiskan terlalu banyak waktu untuk menemukannya di repo saya, tetapi jika kami memiliki terlalu banyak orang yang memiliki masalah ini, saya mungkin menemukannya, mengujinya, dan men-debugnya.

Sejauh ini saya tidak ingin menghabiskan terlalu banyak waktu untuk hal-hal Web tetapi dalam Pembelajaran Mendalam.

Satou_456 copy

Sejauh ini, dalam kasus saya hanya meneruskan ini ke dalam strategi lokal karena saya memiliki bidang bernama khusus...

    {
      usernameField: "name",
      passwordField: "password",
      passReqToCallback: true,
    }

@ Croma1994 apakah itu berfungsi? Jika berhasil, itu bagus.

@JonathanSum Ya! Saya memiliki kesalahpahaman, berpikir bahwa fungsi strategi lokal mencari secara otomatis untuk muatan req.body tidak peduli atribut nama apa yang mereka miliki, tetapi Anda harus meneruskan objek yang menentukan nama dan meneruskan req ke panggilan balik untuk menggunakan pesan flash .

Tidak berhasil untuk saya, saya telah membenturkan kepala saya selama 3 hari?
Ada perbaikan ga guys?

Ya. Satu lagi memiliki masalah yang sama. Selamat datang di kapal.
image

Juga masalah yang sama Kredensial yang hilang

passport.use('local.signup', LocalStrategy baru({
usernameField: 'email',
passwordField: 'passwd',
passReqToCallback: benar
}, fungsi (permintaan, nama pengguna, kata sandi, selesai) {
req.check('email', 'Email Tidak Valid').notEmpty().isEmail();
req.check('password', 'Password Anda minimal 5 karakter').notEmpty().isLength({min:5});
var error = validasiErrors();

Yang saya ikuti dari http://www.passportjs.org/docs/username-password/

Saya tidak begitu ingat perbaikannya tetapi ada hubungannya dengan melewatkan parameter yang diberi nama berbeda; di tautan dokumentasi @ jefflaub12 yang dibagikan, dikatakan;

"Secara default, LocalStrategy mengharapkan untuk menemukan kredensial dalam parameter bernama nama pengguna dan kata sandi. Jika situs Anda lebih suka memberi nama bidang ini secara berbeda, opsi tersedia untuk mengubah default."

Saya tahu dikatakan Anda memiliki opsi untuk mengubah default tetapi jika saya ingat dengan benar, menggunakan default memperbaiki masalah untuk saya.

Semoga beruntung.

Itu dilakukan dengan menggunakan default alih-alih mencoba mengganti nama variabel untuk usernameField. Terima kasih

Apakah halaman ini membantu?
0 / 5 - 0 peringkat