我正在尝试按照irl nathans guide制作注册页面。现在一切正常,但是sail.js似乎保存了数据库中表单的所有内容。举个例子,我有这样的形式:
<form class="form-signup" name="signup-form" action="/user/create" method="POST">
<input type="text" name="username" placeholder="<%= __('username') %>"> %>">
<input type="text" name="email" placeholder="<%= __('email') %>">
<input type="password" name="password" placeholder="<%= __('password') %>">
<input type="password" name="confirmation" placeholder="<%= __('confirm-password') %>">
<input class="button" type="submit" value="<%= __('signup') %>"/>
<input type="hidden" name="_csrf" value="<%= _csrf %>"/>
</form>
在此示例中,它将密码和密码确认保存在数据库中,但不应该这样做。
在我的User.js模型中,我有以下属性,但这些属性只是与两个密码一起保存。我还有一个encryptedPassword,如果匹配密码就会对其进行加密。
module.exports = {
attributes: {
username: {
type: 'string',
required: true,
unique: true
},
email: {
type: 'string',
required: true,
isEmail: true,
unique: true
},
encryptedPassword: {
type: 'string'
},
// more unimportant code here.
}
我想知道是否可以防止sails.js在提交表单时保存数据库中的两个未加密密码。我知道我之后可以从数据库中删除它,但这似乎有点愚蠢。
提交时保存的数据库记录:
{
"username": "testuser",
"password": "2",
"confirmation": "2",
"email": "myemail@email.com",
"createdAt": 1496268539155,
"updatedAt": 1496268539155,
"encryptedPassword": "$2a$10$BkwvQnu3TA4DQ1kDMZmi6O7Z/K5uX90fHi/6zkZF.nkKi8MU.zWTS",
"id": "592f3efbaa4d2563e159dc20"
}
由于我正在加密密码,因此它不应该保存未加密的密码,因为它们是提交表单的一部分。我该如何阻止它这样做?
答案 0 :(得分:1)
在您设置数据库连接的位置(connections.js或在/env/development.js中)指定 schema:true
例如:
someDbServer: {
adapter: 'sails-mongo',
host: 'localhost',
port: 27017,
user: 'username',
password: 'pwd',
database: 'db_name',
schema: true
}
将schema设置为true意味着只能插入model js文件中的属性。
要加密密码,您需要在beforeCreate和beforeUpdate中执行此操作。看一下生命周期回调 - sailsjs lifecycle callbacks
答案 1 :(得分:0)
感谢您的回答,但是,我设法通过将对象传递给.create()函数来解决问题。该对象包含我要保存的所有参数,而不是使用req.params.all()。
var userObj = {
username : req.param('username'),
firstname : req.param('firstname'),
encryptedPassword : password,
surname : req.param('surname'),
email : req.param('email')
}