我在帆中遇到了一些麻烦。我对此水线和航行的无效属性遇到了一些问题。如何尝试这个纽约来解决它。但是没有变化..我不知道问题在哪里...而且它非常崩溃...这个脚本中的错误是吗?这里有人可以告诉我并向我解释我能做什么,这是水线可以阻止它的令人毛骨悚然的错误吗?帆上没有任何支持。
so ..问题..当我使用相同的电子邮件注册时,我想再次通过相同的电子邮件注册后会收到ORM错误...
{
"code": "E_VALIDATION",
"invalidAttributes": {
"email": [
{
"value": "mail@mail.com",
"rule": "unique",
"message": "A record with that `email` already exists (`lucasgatsas@gmail.com`)."
}
]
},
"_e": {},
"rawStack": " at WLValidationError.WLError (/Users/spacedigger/Desktop/passport_with_sails-master/node_modules/sails-hook-orm/node_modules/waterline/lib/waterline/error/WLError.js:25:15)n at new WLValidationError (/Users/spacedigger/Desktop/passport_with_sails-master/node_modules/sails-hook-orm/node_modules/waterline/lib/waterline/error/WLValidationError.js:19:28)n at duckType (/Users/spacedigger/Desktop/passport_with_sails-master/node_modules/sails-hook-orm/node_modules/waterline/lib/waterline/error/index.js:59:12)n at errorify (/Users/spacedigger/Desktop/passport_with_sails-master/node_modules/sails-hook-orm/node_modules/waterline/lib/waterline/error/index.js:39:10)n at wrappedCallback (/Users/spacedigger/Desktop/passport_with_sails-master/node_modules/sails-hook-orm/node_modules/waterline/lib/waterline/utils/normalize.js:329:15)n at error (/Users/spacedigger/Desktop/passport_with_sails-master/node_modules/sails-hook-orm/node_modules/switchback/lib/normalize.js:42:31)n at _switch (/Users/spacedigger/Desktop/passport_with_sails-master/node_modules/sails-hook-orm/node_modules/switchback/lib/factory.js:56:28)n at Timeout._onTimeout (/Users/spacedigger/Desktop/passport_with_sails-master/node_modules/sails-disk/lib/adapter.js:179:10)n at ontimeout (timers.js:482:11)n at tryOnTimeout (timers.js:317:5)n at Timer.listOnTimeout (timers.js:277:5)",
"reason": "1 attribute is invalid",
"status": 400,
"details": "Invalid attributes sent to undefined:n • emailn • A record with that `email` already exists (`mail@mail.com`).n",
"message": "[Error (E_VALIDATION) 1 attribute is invalid] Invalid attributes sent to undefined:n • emailn • A record with that `email` already exists (`mail@mail.com`).n",
"stack": "Error (E_VALIDATION) :: 1 attribute is invalidn at WLValidationError.WLError (/Users/spacedigger/Desktop/passport_with_sails-master/node_modules/sails-hook-orm/node_modules/waterline/lib/waterline/error/WLError.js:25:15)n at new WLValidationError (/Users/spacedigger/Desktop/passport_with_sails-master/node_modules/sails-hook-orm/node_modules/waterline/lib/waterline/error/WLValidationError.js:19:28)n at duckType (/Users/spacedigger/Desktop/passport_with_sails-master/node_modules/sails-hook-orm/node_modules/waterline/lib/waterline/error/index.js:59:12)n at errorify (/Users/spacedigger/Desktop/passport_with_sails-master/node_modules/sails-hook-orm/node_modules/waterline/lib/waterline/error/index.js:39:10)n at wrappedCallback (/Users/spacedigger/Desktop/passport_with_sails-master/node_modules/sails-hook-orm/node_modules/waterline/lib/waterline/utils/normalize.js:329:15)n at error (/Users/spacedigger/Desktop/passport_with_sails-master/node_modules/sails-hook-orm/node_modules/switchback/lib/normalize.js:42:31)n at _switch (/Users/spacedigger/Desktop/passport_with_sails-master/node_modules/sails-hook-orm/node_modules/switchback/lib/factory.js:56:28)n at Timeout._onTimeout (/Users/spacedigger/Desktop/passport_with_sails-master/node_modules/sails-disk/lib/adapter.js:179:10)n at ontimeout (timers.js:482:11)n at tryOnTimeout (timers.js:317:5)n at Timer.listOnTimeout (timers.js:277:5)"
}
这是我的user.js文件:
/**
* User.js
*
* @description :: TODO: You might write a short summary of how this model works and what it represents here.
* @docs :: http://sailsjs.org/#!documentation/models
*/
var bcrypt = require('bcrypt');
module.exports = {
attributes: {
email: {
type: 'email',
unique: true,
required: true
},
password: {
type: 'string',
minLength: 6,
required: true
},
toJSON: function() {
var obj = this.toObject();
delete obj.password;
return obj;
}
},
beforeCreate: function(user, cb) {
bcrypt.genSalt(10, function(err, salt) {
bcrypt.hash(user.password, salt, function(err, hash) {
if (err) {
console.log(err);
cb(err);
} else {
user.password = hash;
cb();
}
});
});
}
};
这是我的软件包。JSON:
{
"name": "passport_with_sails",
"private": true,
"version": "0.0.0",
"description": "a Sails application",
"keywords": [],
"dependencies": {
"bcrypt": "^0.8.7",
"cookie": "file:node_modules/cookie",
"ejs": "^0.8.8",
"express": "^4.16.3",
"grunt": "0.4.2",
"grunt-sync": "0.0.8",
"include-all": "^0.1.6",
"mongodb": "^3.0.5",
"passport": "^0.2.2",
"passport-local": "^1.0.0",
"rc": "^0.5.5",
"sails": "^0.12.14",
"sails-disk": "^0.10.10",
"sails-hook-orm": "^1.0.9",
"sails-mongo": "^0.12.2",
"waterline": "^0.13.1"
},
"devDependencies": {
"grunt-contrib-clean": "^0.5.0",
"grunt-contrib-coffee": "^0.10.1",
"grunt-contrib-concat": "^0.3.0",
"grunt-contrib-copy": "^0.5.0",
"grunt-contrib-cssmin": "^0.9.0",
"grunt-contrib-jst": "^0.6.0",
"grunt-contrib-less": "^0.11.1",
"grunt-contrib-uglify": "^0.4.1",
"grunt-contrib-watch": "^0.5.3",
"grunt-sails-linker": "^0.9.6"
},
"scripts": {
"start": "node app.js",
"debug": "node debug app.js"
},
"main": "app.js",
"repository": {
"type": "git",
"url": "git://github.com/balderdashy/sails.git"
},
"author": "lucas",
"license": ""
}
这是Passport.js
var passport = require('passport'),
LocalStrategy = require('passport-local').Strategy,
bcrypt = require('bcrypt');
passport.serializeUser(function(user, done) {
done(null, user.id);
});
passport.deserializeUser(function(id, done) {
User.findOne({ id: id } , function (err, user) {
done(err, user);
});
});
passport.use(new LocalStrategy({
usernameField: 'email',
passwordField: 'password'
},
function(email, password, done) {
User.findOne({ email: email }, function (err, user) {
if (err) { return done(err); }
if (!user) {
return done(null, false, { message: 'Incorrect email.' });
}
bcrypt.compare(password, user.password, function (err, res) {
if (!res)
return done(null, false, {
message: 'Invalid Password'
});
var returnUser = {
email: user.email,
createdAt: user.createdAt,
id: user.id
};
return done(null, returnUser, {
message: 'Logged In Successfully'
});
});
});
}
));
您已经配置了用独特约束的用户模型的电子邮件属性,因此当您尝试使用同一电子邮件创建另一个电子邮件时,它会失败。
<</p>您应该先检查DB中存在EmailID的存在,然后仅插入。您不能在单个查询中进行检查和插入。