私は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>
ReferenceError:nameは38行目で定義されていません。newUser.local.name = nameのname変数を使用しています。ライン。 –
'LocalStrategy'は' username'と 'password'の2つのフィールドで動作します。ユーザー名の代わりに電子メールアドレスを使用することもできますが、これはあなたが行ったことですが、両方を持つことはできません。だからあなたはそのことを回避しなければならないでしょう。 'req'を渡しているので、おそらく' req.body.name'を代わりに使うことができます。 – robertklep
私はしようとしていることは、認証にユーザー名とパスワードを使用していますが、ユーザーが名前を記入できるように、ビュー内に余分なフィールドを作成しました。そうすれば、ログインしたページに名前を表示できます。だから、私はちょうどデータベースに余分なフィールドを追加しようとしています。パスポートでこれはできないのですか?そうでない場合、私は電子メールを表示することができます。 –