1

これまでになく素晴らしい EventedMind Customizing Loginスクリーンキャストの修正版を使用して、Accounts パッケージを調べてみました。

github の代わりに facebook を使用するように変更し、情報を更新しようとしたときに何かに気づきましたuser.profile。具体的には、への変更を処理する正しい方法/場所を探していuser.profileます。

たとえば、初めて FB ユーザーとして認証したとします。これを行うと、CreateUserイベントが発生します。を使用するAccounts.onCreateUser(...)と、次のように FB グラフからプロファイルに追加情報を取り込むことができます。

Accounts.onCreateUser(function(options,user){

var accessToken = user.services.facebook.accessToken,
    result;

result = Meteor.http.get("https://graph.facebook.com/"+user.services.facebook.username, {
    params: {
        access_token:accessToken,
        fields: ['picture', 'name','first_name','last_name','username','link','location','bio','relationship_status','email','timezone','locale']
    }
});

if (result.error){
    throw result.error;
}

user.profile = result.data; //lazily adding everything
return user;

});

これは、ユーザーの作成時に問題なく機能します。それは素晴らしく、きれいです。

しかし、ここで、一部の情報が変更されたとしましょう。たとえば、プロフィール写真が変わったとしましょう。ログアウトして流星アプリケーションに再度ログインするとAccounts.onCreateUser(...)、ユーザーが既に存在するため、起動しません。再作成されているのではなく、変更されています。

その後のログインで更新するuser.profileか、少なくとも変更を確認してから、必要に応じて変更する必要があります。と同様の方法でこれを行うのが理想的.onCreateUserです。たぶん.onModifyUser何かで...

いくつかのチェックおよび/またはクライアント側コードを使用してこれを行う方法をいくつか考え出すことができますが、よりクリーンなサーバーフックが既に存在するかどうか疑問に思っています。

この状況を処理するための最もクリーンな方法に関する推奨事項はありますか?

前もって感謝します。

4

1 に答える 1

1

ログイン関数を手動で呼び出す場合は、ログインの完了後にクライアントで呼び出される最後のパラメーターとしてコールバックを渡すことができます。http://docs.meteor.com/#meteor_loginwithpasswordを参照してください。

Meteor.loginWithFacebook({}, function (err) { /* make a Meteor method call here */ });

現時点では、文書化されたサーバー側のコールバックはありません。

于 2013-08-20T17:24:34.917 に答える