Axios + Ionic React + Sails:_csrf token 403 Forbidden

Posted

技术标签:

【中文标题】Axios + Ionic React + Sails:_csrf token 403 Forbidden【英文标题】:Axios + Ionic React + Sails: _csrf token 403 Forbidden 【发布时间】:2020-01-29 03:41:04 【问题描述】:

我正在开发一个使用 Sails.js 的 API 和一个使用 Ionic-React 的用户应用程序。在页面加载时,我发出 axios 请求以获取 _csrf 令牌。当我从登录表单向sails 提交数据时,我总是收到403 Forbidden 响应。我在sails 中禁用了csrf (config/security.js),然后我可以检索响应。我在标头中发送令牌。

我也在尝试获取会话 cookie,但它不起作用我认为这可能是服务器拒绝请求的原因。

离子应用:

componentDidMount(this: this) 
axios.get('http://localhost:1337/api/v1/security/grant-csrf-token')
  .then(response => 
    const _csrf = response.data._csrf
    this.setState(
      form: 
        ...this.state.form,
        _csrf: _csrf,
      )
  );

提交时:

const  emailAddress, password, _csrf  = this.state.form;
const config= 
  data: 
    "emailAddress": emailAddress,
    "password": password,
  ,
  headers: 
    "x-csrf-token": _csrf
  ,
  withCredentials: true,
  jar:cookieJar,
;

axios.post('http://localhost:1337/api/v1/users/authenticate', null, config)
.then(res => 
  console.log(res);
)
.catch(err => 
  console.log(err);
);

关于 Chrome DevTools 网络响应:

在 Postman 上,同样的请求有效,我得到 200 的用户数据,并且请求确实包含sails.sid cookie。

我不想禁用 csrf 保护,那不是解决方案。是我缺少的sails.sid cookie吗?

【问题讨论】:

根据我使用 axios 和风帆的经验。您需要将 csrf 令牌作为请求中的标头发送。所以在sails security.js 文件中,将allowCredentials 设置为true。然后在你的 axios 帖子中添加withCredentials : true。然后将 csrf 添加为标题。像axios.defaults.headers.common['X-CSRF-TOKEN'] = _csrf 这样的东西应该适用于你的情况。 【参考方案1】:

我正在使用这个,

axios(
                method: 'post',
                crossdomain: true,
                url: apiFormUrl,
                data: formData,
                headers: 
                    "Content-Type": "multipart/form-data",
                    "Authorization": access_token
                
            )
                .then

它可以工作

【讨论】:

我刚试了一下,用这种方式发送请求对我不起作用 我按照您的要求发送了请求,只是将“跨域”更改为“withCredentials”。 “crossdomain”参数在 Ionic-TypeScript 上引发异常。在标题上,我尝试了 Sailsjs 文档中的“授权”和“x-csrf-token”。我仍然收到 403 - Forbidden 响应。

以上是关于Axios + Ionic React + Sails:_csrf token 403 Forbidden的主要内容,如果未能解决你的问题,请参考以下文章

Ionic-Angular vs Ionic-React [关闭]

怎样在ionic中导入外部图片啊?

react axios 配置

将 Ionic Native / Cordova 插件与 Ionic (React) & Capacitor 一起使用的正确方法是啥?

react 使用axios

react-axios-middleware 承诺处理