2017-06-01 7 views
0

irl nathans guideの後にサインアップページを作成しようとしています。今はすべて動作しますが、sail.jsはデータベースのフォームからすべてを保存するようです。例えば、私はこのフォームがあります。この例ではsailsjs:データベースにフォーム入力を保存しないでください

<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モデルには次の属性がありますが、これらは2つのパスワードの横に保存されています。私はまた、それらが一致する場合、パスワードを暗号化する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. 
} 

私はフォームが送信されるたびに、データベースに2つの暗号化されていないパスワードを保存するからsails.jsを防止することができるかどうかと知っていただきたいと思います。私は後でそれをデータベースから削除することができますが、それはちょっとばかげているようです。

提出データベース、中に保存されたレコード:

{ 
    "username": "testuser", 
    "password": "2", 
    "confirmation": "2", 
    "email": "[email protected]", 
    "createdAt": 1496268539155, 
    "updatedAt": 1496268539155, 
    "encryptedPassword": "$2a$10$BkwvQnu3TA4DQ1kDMZmi6O7Z/K5uX90fHi/6zkZF.nkKi8MU.zWTS", 
    "id": "592f3efbaa4d2563e159dc20" 
    } 

私はパスワードを暗号化しておりますので、それはまた、彼らは提出フォームの一部であったという理由だけで、暗号化されていないパスワードを保存するべきではありません。どのようにしてそれを防ぐのですか?

+0

チャンスを入力すると、受信したすべてのreq.paramがコントローラのデータベースに保存されます。 –

+1

'before' createコールバックを使って' values'オブジェクトからパスワードを削除することができます。 参照:http://sailsjs.com/documentation/concepts/models-and-orm/lifecycle-callbacks – khushalbokadey

答えて

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') 
} 
1

セットアップあなたのDB接続(connections.jsたり/env/development.jsに)スキーマを指定:真例えば

someDbServer: { 
    adapter: 'sails-mongo', 
    host: 'localhost', 
    port: 27017, 
    user: 'username', 
    password: 'pwd', 
    database: 'db_name', 
    schema: true 
} 

trueにスキーマを設定するだけ意味モデルjsファイルの属性を挿入できます。

パスワードを暗号化するには、beforeCreateとbeforeUpdateでパスワードを暗号化します。ライフサイクルコールバックを見てみましょう - sailsjs lifecycle callbacks

関連する問題