J'essaie d'utiliser le passeport dans mon système de connexion Node js qui fonctionne avec mongodb. J'ai inclus à la fois le module de passeport et la stratégie locale dans mon fichier app.js.Problème avec le module de passeport dans le nœud js
var express = require('express');
var path = require('path');
var favicon = require('serve-favicon');
var logger = require('morgan');
var expressValidator=require('express-validator');
var cookieParser = require('cookie-parser');
var session= require("express-session");
var passport=require("passport");
var LocalStrategy=require('passport-local').Strategy;
var bodyParser = require('body-parser');
var multer=require("multer");
var flash=require('connect-flash');
var mongo=require('mongodb');
var mongoose=require('mongoose');
var db=mongoose.connection;
Dans le fichier d'itinéraire utilisateurs i ont déclaré les utilisateurs
var express = require('express');
var router = express.Router();
var passport=require("passport");
var LocalStrategy=require('passport-local').Strategy;
var User=require('../models/users');
/* GET users listing. */
router.get('/', function(req, res, next) {
res.send('respond with a resource');
});
router.get('/register', function(req, res, next) {
res.render('register',{
"title":'Register'
});
});
router.get('/login', function(req, res, next) {
res.render('login',{
"title":'Login'
});
});
router.post('/register', function(req, res, next){
//get the form values
var name = req.body.name;
var email= req.body.email;
var username= req.body.username;
var password= req.body.password;
var password2= req.body.password2;
//Check for image filed
if(req.files&&req.files.profileimage){
console.log('Uploading file....');
//File Info
var profileimageoriginalname =req.files.profileimage.originalname;
var profileimagename=req.files.profileimage.name;
var profileimageMime=req.files.profileimage.mimetype;
var profileimagePath=req.files.profileimage.path;
var profileimageExt=req.files.profileimage.extension;
var profileimageSize=req.files.profileimage.size;
}else{
//Set a default image
var profileimageName="noimage.png";
}
//Form Validation
req.checkBody('name',"nAME FILED IS REquiered").notEmpty();
req.checkBody('email',"email FILED IS REquiered").isEmail();
req.checkBody('username',"UsernamenAME FILED IS REquiered").notEmpty();
req.checkBody('password',"password FILED IS REquiered").notEmpty();
req.checkBody('password2',"password font marchjFILED IS REquiered").equals(req.body.password);
//Check for errors
var errors = req.validationErrors();
if(errors){
res.render('register',{
errors:errors,
name:name,
email:email,
username:username,
password:password,
password2:password2
});
}else{
var newUser=new User({
name:name,
email:email,
username:username,
password:password,
profileimage:profileimagename
});
//Create user
User.createUser(newUser,function(err,user){
if(err)throw err;
console.log(user);
});
//Sucess message
req.flash('success',"You are now registered and may login");
res.location('/');
res.redirect('/');
}
});
passport.serializeUser(function(user,done){
done(null,user.id);
});
passport.deserializeUser(function(id,done){
User.getUserbyId(id,function(err,user){
done(err,user);
});
});
passport.use(new LocalStrategy(
function(username,password,done){
User.getUserByUsername(username,function(err,user){
if(err) throw err;
if(!user){
console.log("Unknown user");
return done(null,false,{message:"unknown user"});
}
User.comparePassword(password,user.password,function(err,isMatch){
if(err) throw err;
if(isMatch){
return done(null,user);
}else{
console.log("invalid password");
return done(null,false,{message:"invalid passwors"});
}
});
});
}
));
router.post('/login',passport.authenticate('local',{failureRedirect:"https://stackoverflow.com/users/login/",failureFlash:"Wrong login or pass"}),function(req,res){
console.log("Authentication Successfully done");
req.flash('success',"You are loged in");
res.redirect('/');
});
module.exports = router;
Et aussi j'ai créé un module pour mes utilisateurs se connecter
var mongoose=require('mongoose');
var bcrypt=require('bcrypt');
mongoose.connect('mongodb://localhost/nodeAuth', { useMongoClient: true });
var db=mongoose.connection;
//User scheme
var UserSchema=mongoose.Schema({
usernam:{
type:String,
index:true
},
password:{
type:String,required:true,bcrypt:true
},
email:{
type:String
},
name:{
type:String
},
profileimage:{
type:String
}
});
var User=module.exports=mongoose.model('User',UserSchema);
module.exports.comparePassword=function(candidatePassword,hash,callback){
bcrypt.compare(candidatePassword,hash,function(err,isMatch){
if(err) return callback(err);
callback(null,isMatch);
});
}
module.exports.getUserById=function(id,callback){
User.findById(id,callback);
}
module.exports.getUserByUsername=function(username,callback){
var query={username:username};
User.findOne(query,callback);
}
module.exports.createUser=function(newUser,callback){
bcrypt.hash(newUser.password, 10,function(err,hash){
if(err)throw err;
//Set hashed password
newUser.password=hash;
//create User
newUser.save(callback)
});
}
Mais its'nt retour absolument rien. Peut-on aider quelqu'un? Je pense qu'il est principalement connecté avec le module de passeport, mais aussi je n'ai absolument ni erreurs que je peux déboguer. Je mongodb il montre l'ensemble de mes bases de données.J'essaye de me connecter avec mon identifiant qui est précédemment enregistré dans ma base de données et fonctionne bien mais il ne retourne rien. C'est juste réfracter la page.
i ont mis à jour mais aucun résultat –