2016-05-14 23 views
1

私はNode.jsにログインしています以前はうまく動作していましたが、今ではフィールドを追加しようとしていますが、動作しなくなりました。理由はわかりません。 Passport.jsを使用して認証を行っています。Node.js - 関数ではありません

奇妙な部分は、ユーザーをデータベースに追加しますが、フィールドを切り替えることです。名前はパスワードなど

エラーは次のとおりです。

C:\Users***\Documents\GitHub\Query\config\passport.js:33 return done(null, false, req.flash('signupMessage', 'Je email bestaat al.')); ^

TypeError: done is not a function at Query. (C:\Users***\Documents\GitHub\Query\config\passport.js:33:28)

passport.js

var LocalStrategy = require('passport-local').Strategy; 
var FacebookStrategy = require('passport-facebook').Strategy; 
var User = require('../models/login.js'); 
var configAuth = require('./auth'); 

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({ 
      nameField: 'name', 
      usernameField: 'email', 
      passwordField: 'password', 
      passReqToCallback: true 
     }, 
     function (req, name, email, password, done) { 

      User.findOne({ 
       'local.email': email 
      }, function (err, user) { 

       if (err) 
        return done(err); 
       if (user) { 
        return done(null, false, req.flash('signupMessage', 'Je email bestaat al.')); 
       } else { 

        var newUser = new User(); 

        newUser.local.name = name; 
        newUser.local.email = email; 
        newUser.local.password = newUser.generateHash(password); 

        newUser.save(function (err) { 
         if (err) 
          throw err; 
         return done(null, newUser); 
        }); 
       } 

      }); 

     })); 

    passport.use('local-login', new LocalStrategy({ 
      usernameField: 'email', 
      passwordField: 'password', 
      passReqToCallback: true 
     }, 
     function (req, name, email, password, done) { 
      User.findOne({ 
       'local.email': email 
      }, function (err, user) { 
       if (err) 
        return done(err); 
       if (!user) 
        return done(null, false, req.flash('loginMessage', 'De gebruiker bestaat niet. Maak een account!')); 
       if (!user.validPassword(password)) 
        return done(null, false, req.flash('loginMessage', 'Wachtwoord is verkeerd. Probeer het opnieuw!')); 
       return done(null, user); 
      }); 

     })); 

ログインモデル

​​3210

ルート

module.exports = function (app, passport) { 
    app.get('/', function (req, res) { 
     res.render('login.ejs', { 
      message: req.flash('loginMessage') 
     }); 
    }); 

    app.get('/register', function (req, res) { 
     res.render('index.ejs', { 
      message: req.flash('signupMessage') 
     }); 
    }); 

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

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

}; 

の一部を形成します LocalStrategyため
<form action="/register" method="post"> 
         <div class="form-group"> 
          <input type="text" placeholder="Name" class="form-control nameForm" name="name"> 
         </div> 
         <!-- END FORM GROUP --> 
         <div class="form-group"> 
          <input type="text" placeholder="Email" class="form-control emailForm" name="email"> 
         </div> 
         <!-- END FORM GROUP --> 
         <div class="form-group"> 
          <input type="password" placeholder="Password" class="form-control" name="password"> 
         </div> 
         <!-- END FORM GRROUP --> 
         <button type="submit" class="btn btn-primary btn-default">Registeer</button> 
        </form> 

答えて

0

検証コールバック署名が正しくありません:

passport.use('local-signup', new LocalStrategy({ 
     nameField: 'name', 
     usernameField: 'email', 
     passwordField: 'password', 
     passReqToCallback: true 
    }, function (req, name, email, password, done) { ... }) 

正しい署名:

function(req, email, password, done) { ... } 

(なしname引数)

フィールドがあるように見える理由も説明しますシフト。

+0

ReferenceError:nameは38行目で定義されていません。newUser.local.name = nameのname変数を使用しています。ライン。 –

+0

'LocalStrategy'は' username'と 'password'の2つのフィールドで動作します。ユーザー名の代わりに電子メールアドレスを使用することもできますが、これはあなたが行ったことですが、両方を持つことはできません。だからあなたはそのことを回避しなければならないでしょう。 'req'を渡しているので、おそらく' req.body.name'を代わりに使うことができます。 – robertklep

+0

私はしようとしていることは、認証にユーザー名とパスワードを使用していますが、ユーザーが名前を記入できるように、ビュー内に余分なフィールドを作成しました。そうすれば、ログインしたページに名前を表示できます。だから、私はちょうどデータベースに余分なフィールドを追加しようとしています。パスポートでこれはできないのですか?そうでない場合、私は電子メールを表示することができます。 –

関連する問題