このスクリーンキャストは、外部認証から追加のユーザー プロファイル属性を取得する方法を示しています。しかし、更新されたプロファイル属性を使用してユーザーがログインするたびに、ユーザー アカウントを更新する方法がわかりません。onCreateUser
ユーザーが認証するたびに呼び出されますか、それとも初めて呼び出されますか? 私が理解していることから、それは初めてです。では、ログインプロセスにフックして属性を更新するにはどうすればよいでしょうか?
1 に答える
誰かがログインしたときにフックして、属性を手動で更新する必要があります。
まず、ユーザーがいつログインしたかを伝えるものが必要です。現時点では、meteor-presenceなどを使用するか、コア パッケージを作成し、それらを/packages
ディレクトリに配置します。
ファイルをaccounts-base
含むパッケージを変更してaccounts-server.js
、ユーザーがログインしたときに「フック」を作成します。
Meteor.methods({
login: function(options) {
.....
if (result !== null)
//Run here
this.setUserId(result.id);
return result;
},
});
次に、//Run Here
facebook に接続して必要なデータを取得する関数を追加します。meteor-prescence
または、類似のライブラリまたはメソッドを使用することにした場合にクライアントから呼び出す Meteor.call メソッド内。これは次のようになります。
if(Meteor.user().services.facebook.accessToken) {
var graph = Npm.require('fbgraph');
graph.setAccessToken(Meteor.user().services.facebook.accessToken);
graph.get('/me',{},function(err,result) {
//Update your user (you could also alter services.facebook instead
Meteor.users.update(Meteor.userId, {$set: {profile:result}});
}
}
上記の例は、fbgraph
node モジュール (インストールする必要があります) を使用する facebook の場合です。または、ここで説明する方法を使用して、個別のパッケージなしで Npm モジュールを使用します。原則として、他のプロバイダーでも同じことができます。ログイン後すぐにデータが更新される可能性があるため、ここでプロバイダーに対して同期タイプの呼び出しを使用する必要はありません。
フックできる別の場所は、パッケージ内の_setUserId
メソッドにもあります。livedata