Я использую библиотеку AWS Amplify с MobileHub.
У меня подключен пользовательский пул Cognito и шлюз API (который взаимодействует с функциями Lambda).Я хотел бы, чтобы мои пользователи подписывали его перед доступом к ресурсам, поэтому я включил «обязательный вход» на странице входа пользователя в MobileHub и на странице облачной логики.
Аутентификация работает нормально, но когда яотправив запрос GET в мой API, я получаю эту ошибку:
"[WARN] 46:22.756 API - ensure credentials error": "cannot get guest credentials when mandatory signin enabled"
Я понимаю, что Amplify генерирует учетные данные гостя и включил их в мой запрос GET.Поскольку я включил «обязательный вход», это не работает.
Но почему он использует гостевые учетные данные?Я вошел в систему - не должны ли они использовать эти учетные данные?Как использовать информацию аутентифицированного пользователя?
Приветствия.
РЕДАКТИРОВАТЬ: Вот код из функции лямбда:
лямбда-функция:
import { success, failure } from '../lib/response';
import * as dynamoDb from '../lib/dynamodb';
export const main = async (event, context, callback) => {
const params = {
TableName: 'chatrooms',
Key: {
user_id: 'user-abc', //event.pathParameters.user_id,
chatroom_id: 'chatroom-abc',
}
};
try {
const result = await dynamoDb.call('get', params);
if (result.Item) {
return callback(null, success(result.Item, 'Item found'));
} else {
return callback(null, failure({ status: false }, 'Item not found.'));
}
} catch (err) {
console.log(err);
return callback(null, failure({ status: false }), err);
}
}
И эти маленькие вспомогательные функции:
response.js:
export const success = (body, message) => buildResponse(200, body, message)
export const failure = (body, message) => buildResponse(500, body, message)
const buildResponse = (statusCode, body, message=null) => ({
statusCode: statusCode,
headers: {
"Access-Control-Allow-Origin": "*",
"Access-Control-Allow-Credentials": true
},
body: JSON.stringify({
...body,
message: message
})
});
dynamodb.js:
import AWS from 'aws-sdk';
AWS.config.update({ region: 'ap-southeast-2' });
export const call = (action, params) => {
const dynamoDb = new AWS.DynamoDB.DocumentClient();
return dynamoDb[action](params).promise();
}