私はnodejsでapiルートを使用して、mongooseを使用してデータベースにユーザーを追加しています。標準的なもの。ただし、1人のユーザーと完全に連携します。次に、別のユーザーを作成しようとすると、新しいユーザーはログインしますが、データベースには保存されません。nodejsはデータベースに1人のユーザーしか作成できません
何か助けていただければ幸いです。ここでは、ルートコードは次のとおりです。
app.get('/register' , function(req , res) {
res.sendFile(path.join(__dirname , '../public' , 'register.html'));
});
app.post('/api/register' , function(req, res) {
User.findOne({'local.email': req.body.email}, function(err, user) {
if(err) {
return res.json({
'message': err
});
}
if(user) {
return res.json({
'message': 'User already exists'
});
} else {
let newUser = new User();
newUser.local.email = req.body.email;
newUser.local.name = req.body.name;
newUser.local.password = newUser.setPassword(req.body.password);
newUser.save(function(err) {
var token;
token = newUser.generateJwt();
res.status(200);
res.json({
'token': token
});
});
}
});
});
スキーマ:
const bcrypt = require('bcrypt-nodejs');
const jwt = require('jsonwebtoken');
const mongoose = require('mongoose');
let userSchema = new mongoose.Schema({
local: {
email: String,
name: String,
password: String
}
});
userSchema.methods.setPassword = function(password) {
return bcrypt.hashSync(password, bcrypt.genSaltSync(10), null);
}
userSchema.methods.validatePassword = function(password) {
return bcrypt.compareSync(password, this.local.password);
}
userSchema.methods.generateJwt = function() {
var expire = new Date();
expire.setDate(expire.getDate() + 7);
return jwt.sign({
_id: this._id,
email: this.local.email,
name: this.local.name,
exp: parseInt(expire.getTime()/1000),
}, process.env.CONFIG_SR);
};
module.exports = mongoose.model('User' , userSchema);
2回目以降のコールで '{token: 'token-value'}'を返信しますか? – alexmac
@alexmacはい。私は毎回チェックし、新しいトークンは常に正しいペイロードを持っています。 –
'newUser.save'コールバックの' err'オブジェクトをチェックしてみてください。検証などで何らかのエラーが発生している可能性があります。 – alexmac