2017-09-07 49 views
1

我做的鬆弛整合爲我的網站,包括允許用戶登錄使用「登錄與時差」按鈕不斷提示用戶許可。理想情況下,我希望它只要求用戶授予一次identity.*權限,然後下次單擊「使用Slack登錄」時,授權屏幕應該只閃爍,然後重定向到下一步(例如使用Facebook),但它不斷顯示授權屏幕,用戶必須點擊「繼續」按鈕才能一次又一次授予權限。這對我們的用戶來說很不方便。有沒有什麼辦法讓它像Facebook一樣提示一次?僅供參考我的應用程序尚未公開分發到應用程序目錄,是否可能是原因?「拍在與鬆弛」每次

+0

你確定它是否是由於應用程序未被髮布?我也遇到了這個問題,同樣在登錄期間只需要在文檔中指定'identity.basic'(https://api.slack.com/docs/sign-in-with-slack) –

+1

這不是由於對於未發佈的應用,至少在當時沒有辦法避開該確認屏幕。我不確定Slack是否已經改變它直到現在。 – KwiZ

回答

0

不,沒有任何在公共應用程序目錄之中。

鬆弛登錄在不緩存用戶登錄像其他OAuth的提供商母鹿,所以如果你想避免用戶必須登錄,在每一個你必須緩存在您的應用程序的用戶權限的時間。例如通過使用cookie。

這裏是如何工作的原則:

  1. 成功簽署了用戶之後,關於存儲在cookie對於客戶端登錄成功的信息。
  2. 當客戶端再次打開您的網頁時,請檢查該客戶端的cookie以獲取有關成功登錄的信息。
  3. 當您找到該信息時,顯示屬於該客戶端的用戶已登錄(而不是顯示Slack登錄按鈕)。
  4. 顯示爲登錄用戶的選擇註銷(可選)

您存儲有關用戶的哪些信息取決於你的應用需求。如果您只想證明登錄成功,則應該足以存儲team_iduser_id。但是,您還將因該成功登錄而獲得該用戶的新access_token(與您的應用的access_token不同)。 (請參閱下面的完整示例你從鬆弛接收)

請記住,Cookie是在客戶端本地存儲並可以查看用戶。因此,根據您的安全需求,建議不要直接在cookie中存儲任何與用戶相關的信息(特別是不要在access_token)。而是存儲一個ID,該ID與應用程序存儲在服務器上的數據鏈接。 (還有其他的辦法解決這個問題,但是這是一個不同的討論。)

這裏是您收到從什麼時差成功登錄之後的示例:

{ 
    "ok": true, 
    "access_token": "XXXX", 
    "scope": "identity.basic", 
    "user": 
    { 
     "id": "U12345678", 
     "name": "Donald Dummy" 
    } 
    "team": 
    { 
     "id": "T12345678" 
    } 
} 
+0

你建議我緩存什麼?我有自己的網站auth令牌,但緩存它意味着保持用戶登錄,這是他們註銷並希望重新登錄的情況。鬆弛的授權代碼僅在10分鐘內有效,因此緩存他們wouldn'工作。訪問令牌存儲在數據庫中,但用戶必須再次爲其身份提供一些證明(授權代碼)才能使用該訪問令牌。 – KwiZ

+0

所以我期望的是,在用戶第一次授予身份權限之後,當用戶點擊「Sign in with Slack」按鈕時,他們仍然應該被帶到鬆弛的oauth頁面,在那裏鬆弛會檢查並看到這個用戶已經向我們授予'identity。*'權限,並立即返回一個新的授權碼給我們的redirect_uri,而不顯示屏幕並讓用戶點擊「繼續」。我需要做什麼來實現這種行爲,或者甚至有可能? – KwiZ

+0

我會延長我的回答,使其更加清晰。 –