2016-08-17 10 views
1

私はユーザーアカウントを管理するためにaccounts-passwordパッケージを使用しています。私はAccounts.createUser()機能を使ってアカウントを作成する2つの方法を試しました。Accounts.createUserがMongoDBでユーザーを作成しないのはなぜですか?

第一の方法:クライアントからAccounts.createUser()を呼び出す

register.js:

Template.register.events({ 
    "submit form"(event){ 
     event.preventDefault(); 

     const email = event.target.email.value; 
     const password = event.target.password.value; 

     Accounts.createUser({ 
      email: email, 
      password: password 
     }); 
    } 
}); 

第二の方法:は、サーバー方法からAccounts.createUser()を呼び出して、そのメソッドを呼び出すクライアントから。 Meteor: Accounts.createUser() doesn't create user

register.js:

Template.register.events({ 
    "submit form"(event){ 
     event.preventDefault(); 

     const email = event.target.email.value; 
     const password = event.target.password.value; 

     Meteor.call('createNewUser', email, password); 
    } 
}); 

methods.js:(サーバー上の)どちらの場合も

Meteor.methods({ 
    'createNewUser'(email, password){ 
     Accounts.createUser({ 
      email: email, 
      password: password 
     }); 
    } 
}); 

、新しいコレクションを経た後にヒントを得ましたMongoDBで作成されます。古いコレクションも更新されていません。私の接続文字列は適切です。なぜこうなった?私は、サーバー上で次のコマンドを使用する場合ただし、文書が作成され

Accounts.users = new Mongo.Collection("profiles", { 
    _preventAutopublish: true, _driver: dbConn 
}); 

Meteor.users = Accounts.users; 

新しいコレクションは、これが動作するために作成する必要があり、なぜ私は知りません。 account-passwordパッケージはそれ自身でコレクションを作成するはずですか?

+0

'Accounts.createUser'を呼び出す直前に' email'と 'password'の値をログに記録して、有効な値を持っていることを確認しましたか? – hwillson

+0

はい、有効な値があります。私はそれを確認した。また、エントリは 'Accounts.users'をmongoコレクションに設定すると発生します。 – chaudharyp

答えて

0

基本バージョンを取得して稼働させたい場合は、デフォルトの{{> loginButtons}}をhtmlに追加してみてください。これはまた、javascriptが実行されるべきであることを確認します。 jsを手動で構築することは、よりカスタマイズ性が必要な場合にのみ意味があります。

0

accounts-baseパッケージを追加しましたか? Accounts.createUserはこのパッケージから来ます。 (docs)

あなたが与えたリンクされた例では、OPはAccounts.config()forbidClientAccountCreation: trueを設定しました。これにより、Accounts.createUser関数がクライアント上で機能しなくなります(ユーザーが登録の手紙を必要とするアプリケーションで便利です)。そのため、ユーザーアカウントサーバー側を作成するための回答が推奨され、アプリケーションには適用されません。

2番目の例では、暗号化されていないパスワードをクライアントから危険なサーバーに渡しています。 あなたはそうのようなサーバーメソッドにそれを送信する前にそれを暗号化することができます。

const password = Accounts._hashPassword(event.target.password.value); 
0

_driver: dbConn

その行が本当に懸念されます。独自のデータベース接続を管理しようとしていますか?

あなたが書いたコードに何も問題はありません。あなたの問題ではありません。Accounts.createUserは正しい呼び出し方法です。

端末からmeteorコマンドを実行してデフォルトで初期化されたものとは別のデータベースを使用する必要がある場合は、MONGO_URLのマニュアルを参照してください。

関連する問題