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
}));
};
表格部分
<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'。你可以選擇使用電子郵件地址而不是用戶名,這就是你所做的,但你不能同時擁有。所以你將不得不解決這個問題。既然你傳遞'req',你可以使用'req.body.name'來代替。 – robertklep
我試圖做的事情是使用用戶名和密碼進行驗證,但我在視圖中添加了一個額外的字段,以便用戶可以填寫他們的名字。這樣我可以在登錄頁面上顯示該名稱。所以我只是試圖將額外的字段添加到數據庫中。護照不是這樣嗎?如果沒有,我可以顯示電子郵件。 –