首页 文章

POST错误PHP到dynamoDB

提问于
浏览
0

POST到DynamoDB以获取用户登录信息 .

致命错误:未捕获异常'Aws \ DynamoDb \ Exception \ DynamoDbException',消息'错误执行'GetItem“on”https://dynamodb.us-east-1.amazonaws.com“; AWS HTTP错误:客户端错误:POST https://dynamodb.us-east-1.amazonaws.com导致400 Bad Request响应:{“__ type”:“com.amazon.coral.validate#ValidationException”,“message “:”提供的键元素与架构不匹配“(截断...)ValidationException(client):提供的键元素与架构不匹配 - {”_ _ type“:”com.amazon.coral.validate#ValidationException“ ,“message”:“提供的关键元素与架构不匹配”}'GuzzleHttp \ Exception \ ClientException:客户端错误:POST https://dynamodb.us-east-1.amazonaws.com导致400 Bad Request响应:{“__ type”:“com.amazon.coral.validate#ValidationException”,“message”:“提供的关键元素与/ var / www / html / sdks / vendor中的架构”(截断...)不匹配/guzzlehttp/guzzle/src/Exception/RequestException.php:113堆栈跟踪:/ var / www / html / sdks / vendor / aws / aws-sdk-php中的#0 / var / www / html / sdks / vendor / guzz第192行上的/src/WrappedHttpHandler.php

我的PHP代码-----

require 'config.php';
    use Aws\DynamoDb\DynamoDbClient;

    $client = new DynamoDbClient([
        //'profile' => 'default', // access ID + secret are in the       .aws/credentials file
        'region' => 'us-east-1', // also tried with "eu-west-1"
        'version' => 'latest',
        'debug'  => true
    ]);
    // echo "after client instanciation"; // this is not displayed

    $username = null;
    $password = null;

    if ($_SERVER['REQUEST_METHOD'] == 'POST') {

    if(!empty($_POST["userid"]) && !empty($_POST["password"])) {
         $username = $_POST["userid"];
         $password = $_POST["password"];

         $response = $client->getItem(array(
             'TableName' => 'user',
             'Key' => array(
             'userid' => array( 'S' => $username),
             'password' => array( 'S' => $password),
         )
         ));

         if($username == 'userid' && $password == 'password') {
              session_start();
              $_SESSION["authenticated"] = 'true';
              header('Location: index.php');
         }
         //else {
              //header('Location: login.php');
         //}

    //} else {
         //header('Location: login.php');
    }

    print_r ($response['Item']);
  }
?>

1 回答

  • 0

    我怀疑你的主键(散列/分区键)实际上是“userid”,而不是“userid”“password” . 因此,DynamoDB确切地告诉您 - 您用于传递给DynamoDB的任何名称都与DynamoDB认为您的主键不匹配 . 我想,一旦你拿出下面的线,它将更接近为你工作:

    'password' => array( 'S' => $password),
    

    另外,您可能希望使用某种算法安全地存储密码 - 也许 bcrypt 或类似 . 否则,您的密码将以纯文本格式存储,这些日子并不是一种好的做法 .

相关问题