2

この投稿の回答として見つかったログインのカスタマイズに関するこの素晴らしいチュートリアル(http://goo.gl/VLO34 )に従っていますが、うまくいきません。

すべてのファイルを逐語的にコピーし、必要に応じてアンダースコア_.pickやhttpなどの補足的なスマートパッケージを追加し、誤って省略しました。Meteor.http.get

Anyhoo-githubでアプリを認証しましたが、Webコンソールとdb.users.findOne()ローカルmongoインスタンスのMeteor.usersは、 Accounts.OnCreateUser()[githubから取得している]ユーザープロファイルに新しい情報を追加しなかったことを示しています。言い換えれば、そのチュートリアルに続いて何も明らかに{{currentUser.profile.avatar_url}}{{currentUser.profile.login}}ません。そのため、画面に空白の情報が表示されます。

スクリーンキャストを最初に試したところ、{loginButtons}}がの値を返すことに気づきました{{currentUser.profile.login}}。私はタイプミスについて何度もコードをレビューしましたが、何かがかなりずれていると感じていAccounts.onCreateUser(fn)ます...

私はMeteor0.5.7を使用していますが、そのスクリーンキャストの後で他の誰かがこの問題を経験した場合は、私に知らせてください。ありがとう、

編集:プロジェクトを-http ://rptest-customlogin.meteor.com/にデプロイしました。

4

2 に答える 2

5

スクリーンキャストの作者はこちら。そして数秒前の時点で、あなたのサイトの新しいユーザー:-)。そのため、ログインがサイトで機能しているようです。しかし、アプリで何が起こっているのかは、レンダリング時またはコンソールへの印刷時にログイン情報がまだ利用できないことだと思います。その理由は、そのすべての情報が非同期で入力されているためです。プロセスが完了するまでに数秒かかります。テンプレートのMeteor.user()。profileデータに依存している場合は、最初にログインプロセスがまだ進行中であるかどうかを確認する必要があります。

これを行うには、Meteor.loggingIn()javascript関数または{{#if loggingIn}}ハンドルバーブロックヘルパーのいずれかを使用できます。その関数は「リアクティブ」です。つまり、結果がからUIに変わるtruefalse、更新されます。したがって、テンプレートは次のようになります。

<template name="loginDependentWidget">
  {{#if loggingIn}}
     Logging In
  {{else}}
     {{currentUser.profile.avatar_url}}
  {{/if}}
</template>

これは役に立ちますか?

于 2013-03-07T21:13:39.300 に答える
1

タイプミスの可能性がありますが、 MeteorドキュメントAccounts.OnCreateUser(fn);である必要があります:http: //docs.meteor.com/#accounts_oncreateuserAccounts.onCreateUser(fn);

そして、同じテーマに関する別の投稿: 外部サービスを使用したMeteorログイン:プロファイル情報を取得する方法は?

編集:以下のコードのフォーマットにより、編集として投稿します。それまでの間、次のコードを使用して、自分のプロジェクトで実行しています。

Accounts.onCreateUser(function(options, user) {
       if(!options || !user) {
        console.log('error creating user');
        return;
    } else {
        if(options.profile) {
            user.profile = options.profile;
        }
    }
    return user;
});

これは問題なく機能しています。Accounts.onCreateUser();サーバーに配置しましたか?

于 2013-03-07T07:53:06.523 に答える