2017-04-26 2 views
0

Nachdem ich die Authentifizierung von pass.js und mongoose eingerichtet habe, erhalte ich ständig die "Ungelöste Funktion oder Methode" in all meinen relevanten Aussagen."Ungelöste Funktion oder Methode" mit Passport.JS

enter image description here enter image description here

Ich versuchte chaches und Neustart zusammen mit anderen Abhilfen jedoch ungültig zu machen, hat sich das Problem bestehen blieb.

Mein user.js:

var Schema = mongoose.Schema; 
var passportLocalMongoose = require('passport-local-mongoose'); 

//create user schema and model 
var User = new Schema({ 
    username: String, 
    password: String, 
    studentID: String, 
    grades: [{ 
     subject: String, 
     grade: String 
    }] 
}); 

User.plugin(passportLocalMongoose); 

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

When I run the server, I also get the error:

TypeError: passport.serialize is not a function

+1

hübsche Bilder, nutzlos, aber hübsch - ich nehme es 'models/user.js' ist etwas, das Sie geschrieben haben - Sie haben es wahrscheinlich falsch geschrieben - wer kann sagen, den Code posten, wenn es deins ist (kein Bild davon) –

+0

@ JaromandaX die Bilder sind nur enthalten, um zu zeigen, dass Webstorm die Methoden nicht erkennt, entschuldigt mich – Markoe7

+0

Ich verstehe, aber wenn Sie Hilfe mit Code möchten, post ** Ihr ** Code, der wahrscheinlich falsch ist (wieder vorausgesetzt, Modelle/Benutzer. js ist Ihr Code) –

Antwort

0

user.js

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

const Schema = mongoose.Schema; 

//= =============================== 
// User Schema 
//= =============================== 
const UserSchema = new Schema({ 
    email: { 
    type: String, 
    lowercase: true, 
    unique: true, 
    required: true 
    }, 
    password: { 
    type: String, 
    required: true 
    } 
    }); 


// Pre-save of user to database, hash password if password is modified or new 
UserSchema.pre('save', function (next) { 
    const user = this, 
    SALT_FACTOR = 5; 

    if (!user.isModified('password')) return next(); 

    bcrypt.genSalt(SALT_FACTOR, (err, salt) => { 
    if (err) return next(err); 

    bcrypt.hash(user.password, salt, null, (err, hash) => { 
     if (err) return next(err); 
     user.password = hash; 
     next(); 
    }); 
    }); 
}); 

// Method to compare password for login 
UserSchema.methods.comparePassword = function (candidatePassword, cb) { 
    bcrypt.compare(candidatePassword, this.password, (err, isMatch) => { 
    if (err) { return cb(err); } 

    cb(null, isMatch); 
    }); 
}; 

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

passport.js

const passport = require('passport'); 
const User = require('../models/user'); 
const config = require('./main'); 
const LocalStrategy = require('passport-local'); 

// username field is now email 
const localOptions = { 
    usernameField: 'email' 
}; 

// set up the local login strategy 
const localLogin = new LocalStrategy(localOptions, (email, password, done) => { 
    User.findOne({ email }, (err, user) => { 
    if (err) { return done(err); } 
    if (!user) { return done(null, false, { error: 'Your login details could not be verified. Please try again.' }); } 

    user.comparePassword(password, (err, isMatch) => { 
     if (err) { return done(err); } 
     if (!isMatch) { return done(null, false, { error: 'Your login details could not be verified. Please try again.' }); } 

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

passport.use(localLogin); 
0

Jetzt müssen Sie nur noch einen Controller erstellen, um die Geschäftslogik für Benutzerregistrierungen usw. zu verwalten. Zum Beispiel

* UserController.js *

// other functions 

// register 
export function register() { 
    if (!req.body) { 
    res.status(500).json({ error: 'All Fields Required.' }); 
    } 

    const user = new User(req.body) 

    user.save((err, user) => { 
    if (err) { 
     res.status(500).json({ err }); 
    } 
    res.status(200).json({ user }); 
    }) 
} 

router.js

// other important things to require 
const passportService = require('./config/passport'); 

// Middleware to require login/auth 
const requireLogin = passport.authenticate('local', { session: false 
}); 

// your routes go here and you can access requireLogin now, like so: 

router.get('/users/:id', requireLogin, getUserById); 
router.post('/users', register); 

Hoffnung, das hilft. Ich versuche nicht, deine Codebasis zu ändern, aber das ist eine bessere Möglichkeit, das zu tun, was du tun willst.

+0

einzuschließen Ich schätze die Antworten, aber mein Problem ist nicht mit dem Setup, es ist die "Ungelöste Funktion oder Methode" Fehler – Markoe7

+0

Hinzufügen eines Links würde wahrscheinlich helfen. Was du gabst, ist sehr wenig, von dem du ausgehen kannst. –

+0

https://github.com/Scyon/mtsd-schoolbook – Markoe7

Verwandte Themen