2017-02-19 67 views
11

我正在開發一個移動應用程序,目前取決於JWT以維護API的無狀態。該API由移動設備和網絡設備使用。用戶將使用他們的電子郵件和密碼進行註冊。Laravel 5.3 - 社交登錄疑惑

我被分配在此API中實現社交登錄選項。我想澄清我的下列疑慮。

1)當使用社交登錄時,如何生成一個令牌(如JWT),並將其存儲在客戶端?該令牌應該在登錄後隨後發送所有請求。

2)如果社交平臺不提供/共享電子郵件地址[這是我們的主鍵之一],我應該存儲什麼信息?

+0

社交登錄僅用於驗證通過身份驗證的人員。您的數據庫中仍然會有該用戶的用戶記錄。因此,在他們登錄後,您將按照最常用的方式創建JWT。你擔心哪個平臺不提供電子郵件地址?幾乎所有的服務都會有一些類型的用戶ID,所以你的用戶表可能有像'facebook_id'' twitter_id'等字段... – Pitchinnate

+0

大多數社交平臺提供給你的電子郵件地址(我相信Twitter除外)。我假設你可以在web對象成功往返之後重定向到你的應用程序。 –

+0

@logeeks你找到了你的問題的答案? –

回答

1

簡短的回答

  1. 你必須給社會登錄用戶鏈接到您的標準用戶表,並生成(JWT)的令牌,你已經在做
  2. 社會登錄總是返回一個ID標識用戶在社交上。在外部表,與您user_ID的主要用戶表

長的答案

存儲的社會使用,並且social_id,一起讓我們從頭開始,爲了有更好的查看所有問題並清楚你的疑惑的所有方面。

基本用戶表
通常你必須以這種方式(簡體)

  • USER_ID構成的用戶表
  • 登錄(電子郵件)
  • 密碼
  • jwt_token

當用戶登錄,您將更新jwt_token字段並將其返回給用戶以便使用您的API。

實現社會登錄
一個好的方法來添加社交登錄是創建結構如下新social_logins表(簡體)

  • 社會
  • social_id
  • user_id說明

一旦你「社交登錄」一個用戶,你從這裏得到一個數據列表cial網絡本身。請注意,即使您明確要求,用戶也可以禁止檢索私人電子郵件地址(例如,來自Facebook)。

你必須做的第一件事是檢查社會是否返回了你的用戶的電子郵件地址。

  • 如果電子郵件返回,尋找與您的用戶表中的電子郵件地址的用戶,並創建「social_logins」表使用USER_ID領域
  • 如果電子郵件是空白的創建與用戶的關係的記錄,你必須創建在用戶表中的新用戶創建一個「假」的電子郵件地址(用標準方法 - 不是隨機的),然後創建social_login記錄

要避免創建雙用戶(不同的電子郵件地址) ,我總是傾向於要求用戶確認他的電子郵件地址:通過這個簡單的問題,您可以推遲以前的檢查和減少雙重用戶的數量。因此,如果社交登錄沒有返回給您電子郵件地址,您只需顯示一個空白字段,要求用戶填寫其電子郵件地址,然後您將使用該電子郵件地址在用戶表中查找用戶。如果您得到它,只需向用戶顯示相同的字段填寫並要求他確認電子郵件地址,或者如果他更喜歡使用另一個地址或者他已經使用另一個電子郵件地址註冊到您的應用程序,請更改它。

+0

在這一天,使用Laravel Socialite在sitepoint上撰寫了一篇非常好的文章https://www.sitepoint.com/easily-add-social-logins-to-your-app-with-socialite/ –

0

某些社交網絡允許委託用戶身份驗證,或者在自己的系統中要求憑證。當用戶登錄時,外部平臺將爲您提供一個訪問令牌,可用於獲取用戶的某些信息。

使用此數據將用戶註冊到您自己的系統中。附加提供的訪問令牌。根據您所請求的權限,您可以使用令牌在社交平臺中執行其他操作。

然後在用戶登錄的Web /移動應用程序中發出一個JWT作爲身份驗證令牌。請注意,此JWT必須獨立於身份驗證提供程序發送的訪問令牌。包括一些感興趣的索賠,如subexp,並用密鑰對其進行簽名。例如

{ 
    "sub": "userid",  //unique user id assigned in your system 
    "name": "User name" //Name provided by social 
    "iss": "issuer",  //you are the issuer 
    "exp": 1300819380, //Expiration date 
    "login":"facebook" //login method used 
    } 

如果您打算使用像谷歌或Facebook的幾個認證系統,請不要使用電子郵件作爲唯一的標識符,因爲它可以爲同一用戶的不同。您將需要額外的註冊過程來鏈接用戶在不同網絡中的帳戶。例如,讓用戶設置在其他系統中使用的標識符,或者在用戶登錄Facebook時啓動登錄過程中的登錄過程