我正在使用AWS Lambda,Cognito和API Gateway(與Serverless編排)爲我的Web應用程序構建API。AWS Lambda - Cognito Identity ID使用相同的登錄名更改
用戶認證使用Cognito,然後使一個認證請求到API(圖案從Serverless Stack教程,其中I抓住他們Cognito ID複製:
event.requestContext.identity.cognitoIdentityId
然後我搶相關聯的用戶記錄與cognitoIdentityId
執行基於角色/權限的邏輯並返回相關數據
我一直在遇到的麻煩是,當不同的人(我正在使用其他開發者,目前)使用相同的憑據登錄,但是fr om不同的計算機(以及在某些情況下的國家),cognitoIdentityId
與他們的請求發送完全不同 - 爲同一用戶userPool
用戶記錄!
注:我不與任何 「聯合身份」(即,臉譜等)整合。這是簡單的舊電子郵件登錄。每個人都使用相同的信用卡,但有些人的請求來自不同的Cognito ID。
這是非常有問題的,因爲我沒有看到另一種方式來唯一標識與Cognito記錄關聯的數據庫中的用戶記錄。
問題:我缺少的東西?有一個更好的方法嗎?這是預期的行爲?
的API是目前不實際上插入數據庫。由於我們的數據結構仍然不穩定,應用程序遠離現場,因此我創建了一個API,它像數據庫一樣集成了數據庫並返回數據,但該數據只存儲在JSON文件中。我會重現下面的一些相關代碼,以防萬一它是相關的。
一個例子拉姆達,用於獲取當前用戶:
export function getSelf(event, context, callback) {
const { cognitoID } = parser(event);
const requester = cognitoID && users.find(u => u.cognitoID === cognitoID);
try {
if (requester) {
return callback(null, success(prep(requester, 0)));
} else {
return authError(callback, `No user found with ID: ${cognitoID}`);
}
} catch (error) {
return uncaughtError(callback, error);
}
}
那解析器的東西往上頂只是一個實用程序來得到我想要的ID。
相關的用戶記錄可能是這樣的:
{
cognitoID: 'us-west-2:605249a8-8fc1-40ed-bf89-23bc74ecc232',
id: 'some-slug',
email: '[email protected]',
firstName: 'John',
lastName: 'Jacob Jingleheimer Schmidt',
headshot: 'http://fillmurray.com/g/300/300',
role: 'admin'
},
你能否讓我的身份池ID,用戶池ID,用戶名和其他開發商收到的身份ID? –
@RachitDhall - PMing似乎不是SO上的功能! https://meta.stackexchange.com/questions/431/any-way-to-send-a-personal-message-to-another-user - 我沒有看到您的個人資料上的聯繫信息。如果您通過redshiftdigitalcom.com的sasha給我發電子郵件,我可以回覆信息。謝謝! – Sasha