我在這里寫信,希望能得到幫助,或者至少能得到澄清。
我在一家創業公司作業,幾周前我們推出了我們的SaaS。我們用Aws Cognito管理我們所有的用戶。我在前端使用amazon-cognito-identity-js進行認證,注冊和登錄都運行良好。我們希望通過 Google 添加社交登錄(OAuth),為此我使用了 aws-amplify-js,按照 Amplify docs 中的規定呼叫 Auth.federatedSignIn({provider: 'Google'}) 。
用戶第一次用Google登錄時,在Cognito中正確地創建了一個新的用戶,但如果我試圖用同一個用戶再次登錄時,就會出現以下錯誤。#error_description=Invalid user attributes: email: Attribute cannot be updated.
&error=invalid_request。
顯然,這是一個相當普遍的問題:
在尋找解決方案后,我認為發生這種情況是因為當我們創建用戶池時,我們將email設定為必填屬性,并且它被自動設定為不可變。顯然,如果你想使用社會化登錄,每一個屬性都應該是可變的(如這里指定的,因為在每一個新的登錄中,Cognito都會試圖更新它們。
所以現在我們被卡住了。我們無法將現有用戶池的email屬性從immutable改為mutable,而且據我所知,也無法阻止Auth.federatedSignIn({provider: 'Google'})更新每個用戶屬性。
我們不能簡單地洗掉并重新創建我們的用戶池,因為我們已經在生產中,而且我們已經有幾個用戶注冊了。是否有任何可能的解決方案或變通方法來解決這個問題?任何形式的建議都將是非常有幫助的!
uj5u.com熱心網友回復:
就目前而言,你沒有什么可以做的,只能將所有的用戶遷移到另一個用戶池。
對于使用聯合登錄的用戶,這不會改變任何東西。你沒有存盤他們的密碼,所以他們不會看到任何區別。
問題始于您擁有密碼的用戶。雖然你可以將他們遷移到另一個池中,但他們將不得不設定一個新的密碼。
您可以撰寫一個簡單的腳本,創建一個包含用戶資料的CSV檔案,然后使用新用戶池的匯入功能來匯入所有用戶。然后,所有非聯合用戶將需要設定新的密碼。
你可以直接通知所有的人這將發生,因為整個操作將涉及一些停機時間(因為你不希望兩個池子不同步)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/308357.html
標籤:
上一篇:terraformaws_secretsmanager_secret_version設定base64encode(file("./src/secret.json"))為值。
下一篇:服務器Tomcatv8.5在localhost的服務器啟動失敗,原因是:java.lang.ClassNotFoundException
