2013-07-29 58 views
0

This screencast顯示如何從外部認證中檢索其他用戶配置文件屬性。但我不明白我怎麼才能更新用戶帳戶每次用戶登錄可能更新的配置文件屬性?每次用戶身份驗證或第一次都調用onCreateUser?從我的理解來看,這只是第一次。那麼我怎樣才能登錄進程來更新屬性呢?更新Meteor中來自外部認證源的屬性

+0

糾正我,如果我錯了:不是所有的用戶相關的操作被寫入您可以觀察到的'用戶'集合嗎? – imslavko

+1

@imslavko:問題是當他的個人資料@ Facebook/Twitter /等發生變化時,如何更新用戶個人資料。 –

+0

您是否嘗試從onCreateUser中取出Meteor.http.get調用並將其添加到用戶登錄後運行的幫助程序中? – booyaa

回答

0

當某人登錄並手動更新屬性時,您需要掛鉤。

首先你需要的東西,當用戶登錄時,告訴。目前,你可以使用基於客戶端的解決方案使用的東西(如呼叫向服務器發出第二次在成功登錄),如meteor-prescence或編輯核心軟件包並將它們放入您的/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節點模塊(你將需要安裝)的Facebook - 或使用的方法描述here使用NPM模塊,而不一個單獨的包。原則上,您也可以爲其他提供商提供相同的服務。請注意,您不必在此處向您的提供商使用同步類型調用,因爲這些數據可以在登錄後立即更新。

另一個可以掛接的位置也在_setUserId方法livedata包。

相關問題