2016-05-08 7 views
0

私は流星アプリを書いていて、ユーザー登録テンプレートを使っています。現在流星法でcreateUserコードを配置する必要はありますか?

Iクライアントにインポート次のコードを、持っている:

Template.register.events({ 
    'submit form': function(event){ 
    event.preventDefault(); 
    let username = $('[id=input-username').val(); 
    let email = $('[id=input-email]').val(); 
    let password = $('[id=input-password]').val(); 
    Accounts.createUser({ 
     username: username, 
     email: email, 
     password: password 
    }, function(error){ 
     if(error){ 
     Bert.alert("That username or email is either taken or invalid. Try again.", 'danger', 'growl-top-right'); 
     // console.log(error.reason); 
     } 
     else { 
     FlowRouter.go('mainLayout'); 
     } 
    }); 
    } 
}); 

私の質問ですが、それはOK、クライアント上Accounts.createUserコードを持っているか、私は流星からこれを呼び出す必要が行うことですメソッドをサーバーにインポートしましたか?私の頭の中では、ユーザーはさまざまな電子メール/ユーザー名で好きなだけ登録することができると考えています。そのため、クライアントにコードを渡してサーバーを呼び出すことに何が問題になりますか。

歓迎します。

答えて

0

CreateUserは、クライアントから使用するように設計されています。これは、サーバーに送信される前にパスワードの暗号化を処理します。

+0

それは感謝します、ありがとう。 –

0

クライアント側で検証を行うことで時間を節約することができますが、Meteorメソッドでコードをサーバー側に記述し、Meteor.call()経由でクライアント側で呼び出すのが理想的です。あなたのケースでは、私は単にクロムコンソールを使用してユーザーを追加することができますし、あなたのDBにランダムなものを追加する百万回にループすることができます。 Csrf攻撃は、この方法で大抵歓迎されます。新しいMongo.Collection()を定義する場合は、collections.allow()とcollections.deny()も指定する必要があります。また、流出プロジェクトから自動公開および安全でないパッケージを削除する必要があります。

+0

その良い点と私はまた考えていた方法。しかし、もし私が悪い人だったら、meteor.callを何百万回も呼び出すだけでなく、ランダムなものをDBに追加することはできますか? –

+0

Meteor.call()は、コンソールや他の実行環境ではない流星コード内でのみ呼び出すことができます。流星開発者は、このユースケースを考えるのがよりスマートです。 –

+0

JavaScriptコンソールで** Meteor.callを呼び出すことができます。そうでなければ、本当に重要なことを見逃しているに違いありません。メソッド内でのユーザ作成のラッピングは一般的には有効ですが、そうするときは 'forbidClientAccountCreation'をオフにする必要があります。さらに、あなたの心配を緩和するために、クライアントを 'DDPRateLimiter'で呼び出すようにクライアントを制限することを検討してください。 – Season

関連する問題