2016-04-19 165 views
2

在我的流星角應用程序,我有2個賬戶登錄配置: Facebook和谷歌多個帳戶的用戶在流星

現在,讓我們說,用戶A登錄他的Facebook帳戶。 登錄後,我將用戶發送到其他表單頁面以插入其社交ID(此表單頁面僅向用戶顯示一次)。

所以現在我有一個用戶對象(Meteor.user() +他的社會id)。

用戶正在應用程序中工作並插入其資產。

現在用戶決定註銷。

過了一段時間,他回到應用程序,這一次他用他的谷歌帳戶登錄。所以現在他將被重定向到「Insert Social ID」頁面表單中,因爲在DB中創建了一個新用戶。

有沒有辦法綁定這兩個用戶?我有一個獨特的標識符(社會id),可以幫助我合併他們,但沒有找到一種方法來做那個綁定...

我需要綁定,因爲如果他用不同的id登錄,他不會可以編輯自己的資產...

10X

回答

0

有一個叫斯潘包:帳戶,合併是合併所有用戶的社會信息,從相同的電子郵件到來,也與verified-合併用戶電子郵件。

你可以找到關於GitHub的庫詳細信息:https://github.com/splendido/meteor-accounts-meld

+0

這個軟件包只有在2封電子郵件相同的情況下才能使用。 我想檢查其多個帳戶是否由其他參數 – doron

+0

但如果你不通過電子郵件檢查,你永遠不會確定這是同一個用戶。 – masca88

+0

正如我上面寫的,我讓用戶輸入他的社交ID。 – doron

2

使用onCreateUser回調。找到一個具有該社交ID的已註冊用戶,如果存在,則只需將新的服務對象添加到現有的用戶文檔中。

Accounts.onCreateUser(function (options, user) { 
    // Find an existing user based on social ID 
    let registeredUser = Meteor.users.findOne(...); 

    if(registeredUser) { 
    let googleProfile = user.services.google; 

    if (googleProfile) { 
     // Add Google login credentials to the user document in Mongo 
     Meteor.users.update({...}, {$set: {"services.google": googleProfile}); 
    } 

    // throw an Error here to stop creating a new user. 
    } 

    // Returning a user object will create a new one in Mongo. 
    return user; 
}); 

聲明:我一般會建議合併用戶。請認爲即使您僅使用Google註冊,盜取您的Facebook密碼的惡意攻擊者也可能會竊取您的數據。

+0

嗯 我想過這個。 但是。問題是我在用戶創建後將用戶發送到「插入社交ID」頁面。因此,在此鉤子之後,用戶插入他的SID ... – doron

+0

爲什麼不事先向用戶詢問社交ID?你可以讓自己創建一個新的用戶,你以後不得不刪除它。您當然也可以手動完成:將當前憑據複製到舊用戶,將用戶登出,刪除新用戶,然後再次loginwithservice ...但這聽起來很尷尬和脆弱。 – aedm

+0

因爲首先讓他進入google/facebook connect然後顯示錶單(連接按鈕在主頁上) – doron