2016-07-01 18 views
7

Wenn ich versuchte, mich von Seite einzuloggen, bekam ich Fehler return done(null, false, req.flash('loginMessage', 'User does not exist'));TypeError: req.flash is not a function.TypeError: req.flash ist keine Funktion

Im Folgenden sind meine server.js und passport.js Konfiguration:

server.js:

var express = require('express'); 
var app = express(); 
var bodyParser = require('body-parser'); 
var methodOverride = require('method-override'); 
var session = require('express-session'); 
var ejs = require('ejs'); 
var mongoose = require('mongoose'); 
var passport = require('passport'); 
var flash = require('connect-flash'); 


mongoose.connect('mongodb://localhost:mydb'); 

require('./config/passport')(passport); 
app.use(express.static('public')); 
app.set('view engine', 'ejs'); 
app.set('views', __dirname+'/public/views'); 
app.use(bodyParser.urlencoded({'extended':'true'})); 
app.use(bodyParser.json()); 
app.use(methodOverride()); 
app.use(session({secret:'learningpassport', 
      resave: true, 
      saveUnitialized: true})); 
app.use(passport.initialize()); 
app.use(passport.session()); 
app.use(flash()); 

require('./app/routes')(app,passport); 


app.listen(3000); 

config/passport.js:

var LocalStrategy = require('passport-local').Strategy; 
var User = require('../app/model/user'); 
module.exports = function(passport){ 

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

passport.use('local-signup', new LocalStrategy({ 
    usernameField: 'username', 
    passwordField: 'password', 
    passReqToCallback: true 
}, 
    function(req,username, password, done){ 
     process.nextTick(function(){ 
      User.findOne({'local.username': username}, function(err, user){ 
       if(err) return done(err); 

       if(user) 
        return done(null, false, req.flash('signupMessage','The username already exists')); 
       else{ 
        var newUser = new User(); 
        newUser.local.username = username; 
        newUser.local.password = newUser.generateHash(password); 

        newUser.save(function(err){ 
         if(err) throw done(err); 
         return done(null, newUser); 
        }); 
       } 
      }); 
     }); 
    })); 
passport.use('local-login', new LocalStrategy({ 
    usernameField: 'username', 
    passwordField: 'password', 
    passReqToCallBack: true 
},function(req,username, password, done){ 
    process.nextTick(function(){ 
    User.findOne({'local.username': username}, function(err,user){ 
     if(err) return done(err); 
     if(!user){ 
      console.log(req.flash); 
      return done(null, false, req.flash('loginMessage', 'User does not exist')); 
     } 

     if(!user.validPassword(password)){ 
      return done(null,false, req.flash('loginMessage', 'Password is not correct')); 
     } 

     return done(null, user); 
    }); 
    }); 
})); 
}; 

Ich würde wirklich Hilfe des schätzen alle !!!

loginservice.config.js

'use strict'; 

angular.module('loginservice').factory('lgservice',function($http){ 
var myservice = { 
    async: function(username, password){ 
     var promise = $http.post('/login',{ 
      username: username, 
      password: password 
     }).then(function(response){ 
      return response; 
     }); 
     return promise; 
    } 

}; 
return myservice; 
}); 

routes.js

module.exports = function(app,passport) { 

app.get('/', function (req, res) { 
    console.log('/'); 
    res.render('pages/login', { 
     message: req.flash('loginMessage') 
    }); 
}); 

app.get('/about', function (req, res) { 
    console.log('/about'); 
    res.render('pages/about'); 
}); 

app.get('/signup', function (req, res) { 
    console.log('sign up'); 
    res.render('pages/signup', { 
     message: req.flash('signupMessage') 
    }); 
}); 

app.get('/logout', function (req, res) { 
    req.logout(); 
    res.redirect('/'); 
}); 

app.get('/home', isLoggedIn, function (req, res) { 
    res.render('pages/home', { 
     user: req.user 
    }); 
}); 

app.post('/signup', passport.authenticate('local-signup', { 
    successRedirect: '/home', 
    failureRedirect: '/signup', 
    failureFlash: true 
})); 

app.post('/login', passport.authenticate('local-login', { 
    successRedirect: '/home', 
    failureRedirect: '/', 
    failureFlash: true 
})); 
}; 


funtion isLoggedIn(req,res,next){ 
if(req.isAuthenticated()){ 
    return next(); 
} 
res.redirect('/'); 
} 
+0

kann u Login api teilen? –

+0

Wenn Sie routes.js Datei teilen, kann ich helfen –

+0

Sicher, nur hinzugefügt. Bitte prüfe. danke – user3330383

Antwort

2

Sie haben einen Rechtschreibfehler

passReqToCallback : true instead of passReqToCallBack: true 
+0

wow !! Ja das war's, vielen Dank !!! – user3330383

0

bereits.

passport.use('local-login', new LocalStrategy({ 
    usernameField: 'username', 
    passwordField: 'password', 
    passReqToCallBack: true 
    }, function(username, password, done) { 
    process.nextTick(function() { 
     User.findOne({ 
     'local.username': username 
     }, function(err, user) { 
     if (err) return done(err); 
     if (!user) { 
      console.log(req.flash); 
      return done(null, false, req.flash('loginMessage', 'User does not exist')); 
     } 

     if (!user.validPassword(password)) { 
      return done(null, false, req.flash('loginMessage', 'Password is not correct')); 
     } 

     return done(null, user); 
     }); 
    }); 
}))(req,res,next); 

Hoffe diese Hilfe.

+0

die req.flash "undefiniert" – user3330383

+0

Verwendung Middle ist wie unten angegeben: 'app.use (Session ({Geheimnis: 'learningpassport', Resave: true, saveUnitialized: true})); app.use (flash()); app.use (pass.initialize()); app.use (pass.session()); ' –

+0

der req.flash ist immer noch undefiniert, auch versucht," app.use (flash()); " oben funktioniert aber auch nicht – user3330383

6

Sie müssen wahrscheinlich app.use(flash()); den Middleware-Stapel nach oben verschieben, damit es vor dem Pass verarbeitet wird.

+0

funktioniert immer noch nicht einmal ich verschiebe es an der Spitze meiner Middleware-Stack – user3330383