7

(クライアント側の両方で)ユーザーをログインするMeteor.loginWithPassword()か、新しいユーザーを作成した後、設定されたすべてのレコードのプロパティが実際に含まれているAccounts.createUserことをコールバックで確認できます。Meteor.user()

{ _id: "XXX",
  profile: {
     name: "Joe Shmoe",
     thumbnail: "http://www.YYY.com/ZZZ.jpg"
  },
  username: "joeshmoe" }

なお、公式ドキュメントによると、

デフォルトでは、現在のユーザーのユーザー名、電子メール、およびプロファイルがクライアントに公開されます。

したがって、テンプレートでこれらのフィールドにアクセスしようとすると、誰でもその理由を知ることができますか

Template.login.user_name = function () {
    return (Meteor.userId() ? Meteor.user().profile.name : '')
};

実際のプロパティがないMeteor.user()だけで返されるために失敗しますか? {_id: "XXX"}つまり、ユーザーは間違いなくログインしていますが、ユーザー オブジェクトが突然失われたか、すべてのプロパティが隠されています。

誰が問題が何であるか知っていますか?

どうもありがとう。

編集: これは、執筆時点での最新バージョンである Meteor 0.5.4 で発生します。受け入れられた答えは実際に問題を解決します。Meteor.userId()オブジェクトの残りがサーバーから到着する前に、すでに有効な場合があります。みんな、ありがとう。

4

3 に答える 3

11

データがまだサーバーから到着していない可能性があります。Meteor.userId を確認するだけでなく、プロパティを確認するとどうなるでしょうか。

Template.login.user_name = function() {
  return Meteor.userId() && Meteor.user() && Meteor.user().profile ? Meteor.user().profile.name : "";
}
于 2013-01-09T18:42:29.193 に答える
2

これは、loginWithFacebook を使用して私にも起こりました。これまで問題なく機能していたこの関数を使用します。

var reallyLoggedIn = function() {
  var user = Meteor.user();
  if (!user) return false;
  else if (!user.profile) return false;
  else return true;
};
于 2013-01-10T05:37:13.373 に答える
1

この問題を再現することはできませんが、UserID があれば、完全なデータベース Meteor.users からすべての情報を取得できます (既に実行しているはずですが)。

Template.login.user_name = function() {
    return (Meteor.userId() ? Meteor.users.findOne({_id:Meteor.userId()}).profile.name : '')
}
于 2013-01-09T19:02:35.327 に答える