web-dev-qa-db-ja.com

Meteorでユーザーサーバー側を作成するにはどうすればよいですか?

新しいMeteorauthブランチで、ユーザーをサーバー側に作成するにはどうすればよいですか?

を呼び出してクライアント側でそれらを作成する方法がわかります

[Client] Meteor.createUser(options, extra, callback)

しかし、起動時にMeteorユーザーコレクションレコードを作成したいとしますか?

たとえば、アプリケーションの起動/ブートストラップ中の管理者アカウント?

ありがとうスティーブ

14
Steeve Cannon

おそらく今ではよく知られている事実ですが、これを完了するために、authブランチでこれを行うための新しいサーバーAPIがあります。 authに関するドキュメント から:

"[サーバー] Meteor.createUser(options、extra)-ユーザーを作成し、そのユーザーに初期パスワードを選択してアカウント登録を完了するためのリンクを記載したメールを送信します

オプションハッシュを含む:電子メール(必須)、ユーザー名(オプション)追加:ユーザーオブジェクトの追加フィールド(名前など)。 「」

APIはまだマスターブランチにないため、変更される可能性があることに注意してください。

8
Qichao Dong

新しいバージョンの流星使用の場合

  Accounts.createUser({
                            username: username,
                            email : email,
                            password : password,
                            profile  : {
                                //publicly visible fields like firstname goes here
                            }

    });

:パスワードハッシュは自動的に生成されます

古いバージョンの流星使用の場合:

1-注:必要なものはありますか[〜#〜] packages [〜#〜]インストールされていますか?

  • mrt addaccounts-base
  • mrtアカウントの追加-パスワード

流星のいくつかのバージョンでは、スティーブが提案したようにSRPパスワードソルトジェネレータを呼び出すことができないので、これを試してください:

2-Meteor.users.insert()を実行します

例えば.

 var newUserId = 
 Meteor.users.insert({
         emails: ['[email protected]'],
         profile  : { fullname : 'peter' }
 });

:ユーザーはユーザー名またはメールアドレスのいずれかを持っている必要があります。この例ではメールを使用しました。

3-最後に、新しく作成したアカウントのパスワードを設定します。

 Accounts.setPassword(newUserId、 'newPassword'); 
 
21
user3462143

今のところ、これは流星コアグーグルグループで提案されています。

Meteor.users.insert({username: 'foo', emails: ['[email protected]'], name: 'baz', services:     {password: {srp: Meteor._srp.generateVerifier('password')}}});

できます。起動/ブートストラップ中にテストしました。

Authブランチはまだ大幅に変更されていると思い、Meteorの背後にあるチームが何らかの機能を提供すると思うので、これを永続的または長期的な回答とは見なしません。

したがって、長期的な答えとしてこれに依存しないでください。

スティーブ

8
Steeve Cannon

現時点では、できないと思います。ランニング

Meteor.call('createUser', {username: "foo", password: "bar"});

近づいていますが、passwords_server.jscreateUserを実装すると、成功するとthis.setUserIdが呼び出され、クライアントが開始する場合を除いて、サーバーでsetUserIdを呼び出すことはできません。メソッドの呼び出し(livedata_server.jsで「サーバーが開始したメソッド呼び出しでsetUserIdを呼び出せません」を検索します。

これはサポートする価値のあるもののようです。おそらく、ユーザーをログインさせるcreateUserの最後の3行は、メソッドの新しいブール値loginオプションで制御する必要がありますか?その後、あなたは使用することができます

Meteor.call('createUser', {username: "foo", password: "bar", login: false});

サーバー内bootstrapコード。

2
David Glasser

サーバー側からユーザーを作成する

    // Server method
    Meteor.methods({
      register: function(data) {
       try {
         console.log("Register User");
         console.log(data);
         user = Accounts.createUser({
           username: data.email,
           email: data.email,
           password: data.password,
           profile: {
             name: data.email,
             createdOn: new Date(),
             IsInternal: 0
           }
         });
         return {
           "userId": user
         };
       } catch (e) {
         // IF ALREADY EXSIST THROW EXPECTION 403
         throw e;
       }
     }
    });
    // Client call method
    Meteor.call('register',{email: "[email protected]",password: "123456"}, function(error, result){
      if(result){
       console.log(result)
      }
      if(error){
       console.log(result)
      }
    });
1
Vishal Wayachal

Server/seeds.jsファイルの次のコードが最新バージョンのMeteor(リリース0.8.1.1)で動作することを確認しました

_if (Meteor.users.find().count() === 0) {
  seedUserId = Accounts.createUser({
    email: '[email protected]',
    password: '123456'
  });
}
_

serverのディレクトリ(またはフォルダ)は、サーバー上でコードを実行していることを意味します。ファイル名_seeds.js_は完全に任意です。

公式ドキュメント は、クライアントで実行したときとサーバーで実行したときのAccounts.createUser()の動作の両方を説明するようになりました。

1
Lloyd Dewolf

Meteorバージョン1.1.0.2(サーバー側)の実際のコーヒースクリプトの例:

userId = Accounts.createUser  
    username: 'user'
    email: '[email protected]'
    password: 'password'
    profile:
      name: 'user name' 
user = Meteor.users.findOne userId 

optionsにprofiles.nameを追加する前に、作業コードで「ユーザーはすでに存在します」という例外を取得するこのAPIでしばらく苦労し、例外が消えました。

参照: Accounts.createUser(options、[callback])

0
Maciek Leks