1
私のアプリケーションのユーザーを登録するルートを作成しようとしていますが、問題が発生しました。 /register
ルートを打つとき、私は次のエラーを取得する:ここでmongooseオブジェクトメソッドが関数ではありません
TypeError: user.setPassword is not a function at
は私のコードです:
モデル/ Users.js
index.jsvar mongoose = require('mongoose');
var crypto = require('crypto');
var jwt = require('jsonwebtoken');
var UserSchema = new mongoose.Schema({
username: {type: String, lowercase: true, unique: true},
hash: String,
salt: String
});
UserSchema.methods.setPassword = function(password){
this.salt = crypto.randomBytes(16).toString('hex');
this.hash = crypto.pbkdf2Sync(password, this.salt, 1000, 64).toString('hex');
};
UserSchema.methods.validPassword = function(password) {
var hash = crypto.pbkdf2Sync(password, this.salt, 1000, 64).toString('hex');
return this.hash === hash;
};
UserSchema.methods.generateJWT = function() {
// set expiration to 60 days
var today = new Date();
var exp = new Date(today);
exp.setDate(today.getDate() + 60);
return jwt.sign({
_id: this._id,
username: this.username,
exp: parseInt(exp.getTime()/1000),
}, 'SECRET');
};
mongoose.model('User', UserSchema);
ルート/
var express = require('express'); var router = express.Router(); var passport = require('passport'); var mongoose = require('mongoose'); var User = mongoose.model('User'); router.post('/register', function(req, res, next){ if(!req.body.username || !req.body.password){ return res.status(400).json({message: 'Please fill out all fields'}); } var user = new User(); user.username = req.body.username; user.setPassword(req.body.password); user.save(function (err){ if(err){ return next(err); } return res.json({token: user.generateJWT()}) }); }); module.exports = router;
app.jsは
var express = require('express');
var path = require('path');
var favicon = require('serve-favicon');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
//MongoDB Setup
var mongoose = require('mongoose');
require('./models/Users');
mongoose.connect('mongodb://localhost/images');
var passport = require('passport');
require('./config/passport');
var routes = require('./routes/index');
var app = express();
app.use(passport.initialize());
.
.
.
module.exports = app;
私はMEANスタックにかなり新たなんだ、と物事が間違っている理由は数時間のためのコードを精練した後、私は見ることができません。これを行うには
私はあなたが塩とハッシュをどのように保管しているのが好きです。前にこの方法でこれを見たことがありません。大部分のコードはdbにパスワードを格納するだけです。 –
リークが発生しても平文は保存されません。私はthinkster.ioからそれを得た。 – Quantaliinuxite
thinkster.ioにリンクしてくれてありがとう、RSSフィードがありませんフィードを追加したいです –