我們都知道 Discourse 的用戶管理和設置都高度依賴電子郵件。
如果 Discourse 沒有設置電子郵件 SMTP 的話,作為管理員是沒有辦法對用戶郵箱進行修改并且通過驗證的。
可以采取的辦法是通過 Discourse 的 DiscourseConnect 來進行用戶同步。
根據官方的說法:使用 DiscourseConnect 對 用戶郵箱進行修改是不會對郵箱的合法性進行校驗的,默認的情況下是你已經對用戶郵箱進行校驗了。
這個 DiscourseConnect 有些配置是需要配置的,可以通過對 API 接口的調用來完成。
調用的方法為 POST。
Discourse 的配置
默認情況下 DiscourseConnect 是關閉的,所以需要在 Discourse 中啟用 DiscourseConnect 才可以。
在配置中搜索:DiscourseConnect?
關鍵字。
上面圖片中的 3 個配置是需要進行配置的。
discourse connect url?: 是 DiscourseConnect 的調用配置地址。這個地址通常是你網站的域名后添加?DiscourseConnect/start
。
這個配置是必須要配置的。
discourse connect secret:這是用來在客戶端對數據進行 hmac 算法加密時候使用的。如果這個地方修改了,后面的加密算法就會出現錯誤字符串,那么 API 調用就會失敗。
這個字符串是隨機的,你可以隨便生成自己的字符串,然后告訴后面程序中這個字符串是什么。
enable discourse connect:啟用 DiscourseConnect 接口連接。在完成上面的 2 個選項配置后,就可以啟用接口了。這個時候 Discourse 實例就才可以接受 SSO 用戶數據。
訪問基本參數
要完成 API 調用,有下面的 4 個參數在訪問之前必須獲得。
參數名稱 | 值 |
---|---|
apiKey | 4fe83002bb5fba8c9a61a65e5b4b0a3cf8233b0e4ccafc85ebd6607abab4651a |
apiUser | system |
connectSecret | jdhb19*Xh3!nu(#k |
url | https://www.isharkfly.com/admin/users/sync_sso |
在上面的 4 個參數中,需要注意的是 connectSecret,只有這個是在 DiscourseConnect 中設置的。
其他的參數為 Discourse API 調用的默認參數。
構建 POST 請求
在發送的 POST 中是一個 JSON 格式的數據。
這個數據為:
body: JSON.stringify({sso: ssoPayload,sig: signature,})
上面的 JSON 格式是 2 個參數,一個為 SSO,另外一個 SIG。
SSO 是 Base64的數據,sig 是加密后的數據。
ssoPayload = Buffer.from(ssoRecord, 'utf8').toString('base64');
signature = crypto.createHmac('sha256', connectSecret).update(ssoPayload).digest('hex');
加密算法使用的是 SHA256,摘要算法為 hex。
當上面的數據都準備完全后,就可以把數據發送到服務器上了。
數據結果
如果用戶數據沒有問題,那么將會創建一個 SSO 的數據。
在 Discourse 的后端將會看到下面的內容。
后端顯示的 SSO 添加的用戶數據。
上面有個最重要的 External ID。
Discourse 使用 DiscourseConnect 來進行用戶數據同步 - Discourse - iSharkFly我們都知道 Discourse 的用戶管理和設置都高度依賴電子郵件。 如果 Discourse 沒有設置電子郵件 SMTP 的話,作為管理員是沒有辦法對用戶郵箱進行修改并且通過驗證的。 可以采取的辦法是通過 Discourse 的 DiscourseConnect 來進行用戶同步。 根據官方的說法:使用 DiscourseConnect 對 用戶郵箱進行修改是不會對郵箱的合法性進行校驗的,默認的情況下是你已經對用戶郵箱進行校…https://www.isharkfly.com/t/discourse-discourseconnect/15776