AWS Amplify использует учетные данные гостя, а не аутентифицированные кредиты, в запросах API - PullRequest
0 голосов
/ 12 мая 2018

Я использую библиотеку 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();
}

Ответы [ 4 ]

0 голосов
/ 08 августа 2018

Вы должны использовать свои учетные данные при каждом запросе на использование сервисов AWS: (пример кода угловой)

Вход :

import Amplify from 'aws-amplify';
import Auth from '@aws-amplify/auth';

 Amplify.configure({
      Auth: {
        region: ****,
        userPoolId: *****,
        userPoolWebClientId: ******,
      }
    });

//sign in

Auth.signIn(email, password)

Запрос

import Auth from '@aws-amplify/auth';

from(Auth.currentCredentials())
   .pipe(
      map(credentials => {
        const documentClient = new AWS.DynamoDB.DocumentClient({
          apiVersion: '2012-08-10',
          region: *****,
          credentials: Auth.essentialCredentials(credentials)
       });

       return documentClient.query(params).promise()

      }),
      flatMap(data => {
          return data
       })
)
0 голосов
/ 21 мая 2018

Вы пытались проверить, почему ваш запрос на вход отклонен / подвержен ошибкам?

Auth.signIn(username, password)
    .then(user => console.log(user))
    .catch(err => console.log(err));

// If MFA is enabled, confirm user signing 
// `user` : Return object from Auth.signIn()
// `code` : Confirmation code  
// `mfaType` : MFA Type e.g. SMS, TOTP.
Auth.confirmSignIn(user, code, mfaType)
    .then(data => console.log(data))
    .catch(err => console.log(err));

Вы можете попробовать это, тогда вам будет легче отлаживать.

0 голосов
/ 30 мая 2018

Я следую инструкциям "serverless-stack" и получил приглашение с тем же предупреждающим сообщением, я правильно вошел в систему и вышел из системы правильно и не понял, почему появилось предупреждение. В моем случае, в Amplify.configure я пропускаю, чтобы добавить identity pool id, и это была проблема, User pools и federated identities не совпадают.

(английский не мой родной язык)

0 голосов
/ 18 мая 2018

Из предложений по отслеживанию проблем aws-ampify добавьте анонимного пользователя в свой пул cognito и жестко запишите пароль в своем приложении. Похоже, есть и другие варианты, но это самый простой на мой взгляд.

...