新しいMeteorauthブランチで、ユーザーをサーバー側に作成するにはどうすればよいですか?
を呼び出してクライアント側でそれらを作成する方法がわかります
[Client] Meteor.createUser(options, extra, callback)
しかし、起動時にMeteorユーザーコレクションレコードを作成したいとしますか?
たとえば、アプリケーションの起動/ブートストラップ中の管理者アカウント?
ありがとうスティーブ
おそらく今ではよく知られている事実ですが、これを完了するために、auth
ブランチでこれを行うための新しいサーバーAPIがあります。 authに関するドキュメント から:
"[サーバー] Meteor.createUser(options、extra)-ユーザーを作成し、そのユーザーに初期パスワードを選択してアカウント登録を完了するためのリンクを記載したメールを送信します
オプションハッシュを含む:電子メール(必須)、ユーザー名(オプション)追加:ユーザーオブジェクトの追加フィールド(名前など)。 「」
APIはまだマスターブランチにないため、変更される可能性があることに注意してください。
新しいバージョンの流星使用の場合
Accounts.createUser({
username: username,
email : email,
password : password,
profile : {
//publicly visible fields like firstname goes here
}
});
注:パスワードハッシュは自動的に生成されます
古いバージョンの流星使用の場合:
1-注:必要なものはありますか[〜#〜] packages [〜#〜]インストールされていますか?
流星のいくつかのバージョンでは、スティーブが提案したようにSRPパスワードソルトジェネレータを呼び出すことができないので、これを試してください:
2-Meteor.users.insert()を実行します
例えば.
var newUserId =
Meteor.users.insert({
emails: ['[email protected]'],
profile : { fullname : 'peter' }
});
注:ユーザーはユーザー名またはメールアドレスのいずれかを持っている必要があります。この例ではメールを使用しました。
3-最後に、新しく作成したアカウントのパスワードを設定します。
Accounts.setPassword(newUserId、 'newPassword');
今のところ、これは流星コアグーグルグループで提案されています。
Meteor.users.insert({username: 'foo', emails: ['[email protected]'], name: 'baz', services: {password: {srp: Meteor._srp.generateVerifier('password')}}});
できます。起動/ブートストラップ中にテストしました。
Authブランチはまだ大幅に変更されていると思い、Meteorの背後にあるチームが何らかの機能を提供すると思うので、これを永続的または長期的な回答とは見なしません。
したがって、長期的な答えとしてこれに依存しないでください。
スティーブ
現時点では、できないと思います。ランニング
Meteor.call('createUser', {username: "foo", password: "bar"});
近づいていますが、passwords_server.js
にcreateUser
を実装すると、成功するとthis.setUserId
が呼び出され、クライアントが開始する場合を除いて、サーバーでsetUserId
を呼び出すことはできません。メソッドの呼び出し(livedata_server.js
で「サーバーが開始したメソッド呼び出しでsetUserIdを呼び出せません」を検索します。
これはサポートする価値のあるもののようです。おそらく、ユーザーをログインさせるcreateUser
の最後の3行は、メソッドの新しいブール値login
オプションで制御する必要がありますか?その後、あなたは使用することができます
Meteor.call('createUser', {username: "foo", password: "bar", login: false});
サーバー内bootstrapコード。
サーバー側からユーザーを作成する
// 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)
}
});
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()
の動作の両方を説明するようになりました。
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でしばらく苦労し、例外が消えました。