Bcrypt error: illegal Argumente String unbekannten

hier ist mein vollständiger code

var express = require('express'),
    app = express(),
    mongoose = require('mongoose'),
    bodyParser = require('body-parser'),
    morgan = require('morgan'),
    webToken = require('jsonwebtoken'),
    bcrypt = require('bcryptjs'),
    assert = require('assert');
    Schema = mongoose.Schema,
    secretKey = "omjdiuwkslxmshsoepdukslsj";

//User Schema
var userSchema = new Schema({
    username: {type: String, required: true, index: {unique:true}},
    password: {type: String, required: true, select: false}
})

userSchema.pre('save', function(next){
    var user = this;

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

    bcrypt.hash(user.password, null, null, function(err, hash){
        if(err) return next(err);

        user.password = hash;
        next();
    })
});

userSchema.methods.comparePassword = function(password){
    var user = this;

    bcrypt.compare(password, user.password, function(err, result){
        if(err){
            console.log(err);
        }
        else {
            console.log("passwords match!");
            return;
        }
    })
}

var userModel = mongoose.model('users', userSchema);


//Connecting to Mongo
mongoose.connect("mongodb://localhost/userstories", function(err){
    if(err) {
        console.log(err);
    }
    else {
        console.log("Connected to database!");
    }
});

//Creating Token
function createToken(user){
    var token = webToken.sign({
        _id: user.id,
        username: user.username
    },  secretKey,{
        expiresIn: 30 * 60 * 1000
    })
    return token;
    }

//Middlewares
app.use(bodyParser.urlencoded({extended: true}));
app.use(bodyParser.json());
app.use(morgan('dev'));

//Api's

app.post('/signup', function(req, res){    
    var user = new userModel({
        username: req.body.username,
        password: req.body.password
    })

    user.save(function(err){
        if(err){
            console.log(err);
        }

        else{
            res.json({message: "User created!"});
        }
    })
})

app.post('/login', function(req, res){

    userModel.findOne({username: req.body.username}, function(err, user){
        if(err) console.log(err);

            if(!user){
                res.send("User not found!");
            }
                 else if(user){

                      var validPassword = user.comparePassword(req.body.password);

                       if(validPassword){
                                var tokens = createToken(user);

                                res.json({
                                    success: true,
                                    message: "Successfully logged In",
                                    token: tokens
                                });
                        } 

                            else {
                                    res.send("Invalid password");
                                  }

                     }
    })
});


//Running the server
app.listen(3000, function(err){
    if(err) console.log("port not working");
    else{
        console.log("Everything went just fine");
    }
})

Habe ich versucht, alle Ansätze und sah all die Antworten hier. Aber niemand scheint zu kommen, über das illegal argument error. Bitte diese Figur ein für mich ich bin sicher, es ist ein Fehler, den ich nicht sehen

  • so wats der Fehler???



3 Replies
  1. 2

    Habe ich versucht den gleichen code für die Authentifizierung einmal und bekam die gleiche Fehlermeldung Error: Illegal arguments: string, function.

    Aber ich sehe keine Problem mit dem code. Die Sache ist die, ich registriert hatte zwei Benutzer mit dem gleichen Benutzernamen und ein anderes Passwort. Dann, als ich versuchte, sich mit der Benutzer-Namen und ein Kennwort dieser Fehler aufgetreten ist, und beendet den server.

    So scheint es, dass Sie auch vor dem gleichen problem. Stellen Sie sicher, es gibt keine Fehler mit diesem Zeug, wenn Sie nicht wollen, zu haben einen Fehler in Ihrem code.

  2. 0

    Ich begegnete auch den gleichen Fehler, wenn ich mit
    bcrypt.compareSync("input to be compared with the hash", hash).

    Später entdeckte ich, dass ich sollte das passieren der tatsächliche Wert in der ersten input-parameter ich.e (Der eigentliche Wert, von dem der hash erzeugt wurde) und der hash in der zweiten input-parameter, aber ich war vorbei, Hash-Werte in der input-Parameter.

    Nach der Korrektur der gleichen es war mir das gewünschte Ergebnis als true oder false.

    Können Sie auch ausführen, und überprüfen Sie Ihren code hier.

  3. 0

    Überprüfen Sie den Wert der user.password bevor es zu bcrypt.compare().

    Chancen sind, Sie haben geholt, die der Benutzer ohne die password Eigenschaft, was sich in einem Wert von undefined. Dies kann geschehen, in Sequelize wenn Sie benutzerdefinierte attributes oder wenn Sie einen Umfang, schließt die Requisiten.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.