小编Tes*_*uji的帖子

发布到 api 网关时无法解析“授权标头中的“不是有效的键=值对(缺少等号)”

我创建了一个 api 网关来将数据放入我的 s3 存储桶中。当我在控制台中测试它时,它没有问题。即使我在授权方测试中测试我的令牌时,它也会返回“允许”,因此我的令牌没有任何问题。我的令牌验证是

^Bearer [-0-9a-zA-z\.]*$
Run Code Online (Sandbox Code Playgroud)

所以我用于生成标题的 python 代码如下所示:

headers = {
    "Authorization": "Bearer " + token,
    "Content-type": "application/json"
}
Run Code Online (Sandbox Code Playgroud)

我的其余代码是:

response = requests.post(url, headers=headers, data={"id":"0678a93d-ee8c-4db5-a831-1e311be4f04b", "test":"12345"})
print(response.text)
Run Code Online (Sandbox Code Playgroud)

我得到的错误消息是 "{"message":"'{My Token}' not a valid key=value pair (missing equal-sign) in Authorization header: 'Bearer {My Token}'."}"

我的网址如下所示:

https://my-api-gateway.amazonaws.com/MyStage,我在我的资源中使用了 {proxy+}。我注意到如果我将标题从 Content-type 更改为 Accept,它会给我同样的错误,但如果我也将我的 url 更改为https://my-api-gateway.amazonaws.com/MyStage/any-arbitrary-string /,我得到一个

   {"response":{"status":"VALID", "message": "success"}} 

Run Code Online (Sandbox Code Playgroud)

但该文件没有出现在我的 s3 存储桶中。我该如何解决?

python amazon-web-services aws-api-gateway

22
推荐指数
4
解决办法
4万
查看次数

如何从 Ant 设计的 Select/Option 组件中获取价值

我想从我的选择中检索值,以便我可以提出发布请求。我从文本输入中获取没有问题,但由于某种原因我无法从下拉菜单选择中获取它。我最终得到一个 "TypeError: Cannot read property 'value' of undefined"

这是我正在使用的代码。

import React from "react";
import { Form, Input, Button, Select } from "antd";

const { Option } = Select;

class ItemForm extends React.Component {

  handleFormSubmit = event => {
    event.preventDefault();
    const name = event.target.elements.name.value;
    const description = event.target.elements.description.value;
    const category = event.target.elements.category.value;
    console.log(name, description, this.refs.category.value);
  };

  render() {
    return (
      <div>
        <Form onSubmit={this.handleFormSubmit}>
          <Form.Item label="Form Layout" />
          <Form.Item label="Product Name">
            <Input name="name" placeholder="Ex: Organic Apple..." />
          </Form.Item>
          <Form.Item label="Description">
            <Input name="description" …
Run Code Online (Sandbox Code Playgroud)

html javascript reactjs antd

8
推荐指数
1
解决办法
2万
查看次数

为什么在尝试读取不存在的 s3 密钥时会收到不同的错误

我有两个环境。一个,我从桌面运行,另一个我从 aws lambda 运行。这两个都是python。我机器上的代码是:

import boto3
s3 = boto3.resource('s3')
bucket = 'my-bucket'
obj = s3.Object(bucket,'test.txt')
try:
    text = obj.get()['Body'].read().decode()
    print("file exists"))
except s3.meta.client.exceptions.NoSuchKey:
    print("key does not exist")

Run Code Online (Sandbox Code Playgroud)

当我运行它时,一切正常,如预期的那样。

当我在 lambda 上运行它时,我得到

调用 GetObject 操作时发生错误 (AccessDenied):拒绝访问

我的 lambda 权限是正确的,所以不可能,因为当文件存在时一切正常。我每次运行都会删除文件,因此它与我运行测试代码的顺序无关。为了调试,我这样做了:

except Exception as e:
    print(e)
Run Code Online (Sandbox Code Playgroud)

在我的 lambda 代码和本地代码中,查看实际错误是什么。在我的本地机器上,错误是:

调用 GetObject 操作时发生错误 (NoSuchKey):指定的键不存在。

当我在我的 lambda 上运行它时,它是

调用 GetObject 操作时发生错误 (AccessDenied):拒绝访问

为什么我会收到不同的错误消息,如果没有懒惰的“除所有异常”解决方案,我该如何解决这个问题?谢谢

这是我的 lambda 的 CFT

                {
                  "Effect": "Allow",
                  "Action": [
                    "s3:PutObject",
                    "s3:GetObject",
                    "s3:ListBucket",
                  ],
                  "Resource": {
                    "Fn::Sub": "arn:aws:s3:::my-bucket/*"
                  }

                }
Run Code Online (Sandbox Code Playgroud)

python amazon-s3 amazon-web-services boto3 aws-lambda

6
推荐指数
1
解决办法
1929
查看次数

如何使用 React/Redux 获取登录用户的用户名(或任何其他数据)

存储用户登录数据(主要是用户名或 uuid)的最佳且安全的方法是什么。那么,我可以在其他组件中使用它吗?我想了几种方法来做到这一点。

  1. 登录/注册时,将用户名存储在本地存储中,并在身份验证结束时将其删除。(非常容易实现,但很可能是最不安全的)
  2. 通过 AuthLogin/AuthSignup 方法传递电子邮件,但我似乎不知道如何通过路由器传递电子邮件。我还注意到,如果浏览器刷新,即使用户仍然登录,这也不起作用。
  3. Cookies(还不知道如何在 React 中使用它们)。

我的 authLogin 方法:


export const authLogin = (email, password) => {
    return dispatch =>{
        dispatch(authStart());
        axios.post('http://127.0.0.1:8000/rest-auth/login/',{
            email: email,
            password: password,

        })
        .then(res => {
            const token = res.data.key;
            const expirationDate = new Date(new Date().getTime() + 3600 * 1000);
            localStorage.setItem('token',token);
            localStorage.setItem('expirationDate',expirationDate)
            localStorage.setItem('email', email)#method 1
            console.log("My token",localStorage.getItem('token'))
            dispatch(authSuccess(token,email));#method 2
            dispatch(checkAuthTimeout(3600));
        })
        .catch(err => {
            dispatch(authFail(err))
        })
    }
}
Run Code Online (Sandbox Code Playgroud)

javascript reactjs redux

5
推荐指数
1
解决办法
6062
查看次数