Accounts API を使用してユーザーを管理しています。私のアプリは、最初に資格情報を使用してユーザーのログインを試みます。エラーが発生した場合は、入力された資格情報を使用して新しいユーザー アカウントを作成します。
// Log the user in
Meteor.loginWithPassword(username, token, function(error) {
if(error) { // create a new user account, log them in and show the page
Accounts.createUser({
username: username,
email: username + '@example.com',
password: token,
profile: {name: username}
}, showThePage);
}
else { // show the page
//showThePage();
window.location.reload();
}
});
ただし、このコード ブロックは、ユーザーが以前にブラウザからログアウトした場合にのみ実行されます。その場合、Meteor が を使用してユーザーをログインさせるのに 2 ~ 3 秒かかりますloginWithPassword
。v0.5.0 を使っているので はなくMeteor.loggingIn()
、しかありませんMeteor.userLoaded()
。何らかの理由で、Meteor はログイン操作を 2 回実行します。1 回目はプレースホルダー ユーザー (userId プロパティのみが設定されています) をロードし、2 回目は実際のユーザーをロードします。これにより、userLoaded() がtrue
2 回返されるため、ローダー イメージが期待どおりに機能しません。
また、loginWithPassword 内の else ブロックで、ウィンドウのリロードを行っていることにも注意してください。showThePage()
すべてのテンプレート データとイベント バインディング コードを含む関数があります。この関数は、ログインしているユーザーのユーザー名を使用してデータを取得します。ここで、else ブロック内の関数が実行されるときに実際のユーザーがログインしていないため (Meteor はユーザーのログインに時間がかかることに注意してください)、データは取得されません。
この問題の回避策はありますか?