簡體   English   中英

Node.js - 不是函數

[英]Node.js - Is not a function

我在Node.js寫一個登錄。 它曾經工作得很好,但現在我正在嘗試添加一個字段,它停止工作,我不知道為什么。 我正在使用Passport.js進行身份驗證。

奇怪的是它確實將用戶添加到數據庫中,但它會切換字段。 名稱是密碼等

我得到的錯誤如下;

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

TypeError:done不是Query的函數。 (C:\\用戶*** \\文件\\ GitHub的\\查詢\\配置\\ 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);
            });

        }));

登錄模型

var mongoose = require('mongoose'); var bcrypt   = require('bcrypt-nodejs');

var userSchema = mongoose.Schema({

    local            : {
        name         : String,
        email        : String,
        password     : String,
    },
    facebook         : {
        id           : String,
        token        : String,
        email        : String,
        name         : String
    } });

userSchema.methods.generateHash = function(password) {
    return bcrypt.hashSync(password, bcrypt.genSaltSync(8), null); };

userSchema.methods.validPassword = function(password) {
    return bcrypt.compareSync(password, this.local.password); };

module.exports = mongoose.model('User', userSchema);

路線

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>

LocalStrategy的驗證回調簽名不正確:

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參數)

這也解釋了為什么這些領域似乎被轉移了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM