sailsjs:避免在数据库中保存一些表单输入

时间:2017-06-01 12:53:19

标签: node.js forms model sails.js

我正在尝试按照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"
  }

由于我正在加密密码,因此它不应该保存未加密的密码,因为它们是提交表单的一部分。我该如何阻止它这样做?

2 个答案:

答案 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')
}