如何解决使用redux的react js中的401错误。?

Posted

技术标签:

【中文标题】如何解决使用redux的react js中的401错误。?【英文标题】:How to resolve 401 error in react js using redux.? 【发布时间】:2021-03-20 14:25:56 【问题描述】:

我试图在 react js 中使用 redux 进行 api 调用,要求是在正文中发送电话号码,并在我正在执行的标头中发送访问令牌,但它一直给我错误 401,这是未经授权的访问。 api 调用的主体需要原始数据,我不确定这是否是我做错的地方。

Action.js

export const verifyPhoneNumber = (userdata) => 
  return async (dispatch) => 
    dispatch(fullScreenLoader(true));
    const api = new Axios();
    const response = axios.post(
      "https://theappsouk.com/api/Profile/SendVerificationSmsCode",
      
        phone_number: userdata.pnumber,
      ,
      
        Authorization: `Bearer $userdata.auth`,
      
    );
    console.log(JSON.stringify(data))
    const  data  = response;
    dispatch(fullScreenLoader(false));
    dispatch(
      type: VERIFY_PHONE_NUMBER,
      payload: data,
    );
    if (data.status) 
      dispatch(
        type: REGISTER_USER,
        payload: data,
      );
    
  ;
;

reducer.js

case VERIFY_PHONE_NUMBER:
      return 
        ...state,
        verifyPhoneNumber: action.payload,
      ;

我的组件

export default class Comp extends Component 
  constructor(props) 
    super(props);
    this.state = 
      email: "",
      number: "",
      address: "",
      error: "",
      selectedCode: "DK",
    ;
  
submitPhoneNumber = () => 
    if (this.state.number.length < 1) 
      this.setState( error: "Phone Number is Required" );
      return;
    
    const  number  = this.state;
    let pnumber = `$this.props.user.data.user.country_code$number`;
    console.log(pnumber)
    const auth = this.props.user.data.user.access_token;
    this.props.verifyPhoneNumber(
      pnumber,
      auth,
    );
  ;
return (
 <form className="form bg-white p-3 mb-3">
            <div className="row">
              <div className="col-4 mr-0">
                <label>
                  <IntlMessages id="profile.emailbox.field.code" />
                </label>
                <select className="custom-select" id="inputGroupSelect01">
                  <option>this.props.user.data.user.country_code</option>
                </select>
              </div>
              <div className="col-8 ml-0 pl-0">
                <TextInputComponent
                  label=
                    <IntlMessages id="profile.emailbox.field.mobilenumber" />
                  
                  type="text"
                  placeholder="Mobilnummer"
                  value=this.state.number
                  onChange=(e) => 
                    this.handleChange(e, "number");
                  
                />
              </div>
            </div>
            <small className="text-danger my-0 py-0">this.state.error</small>
            <div className="form-group">
              <div className="divider"></div>
            </div>
            <div className="form-group mb-0 text-right">
              <button
                className="btn btn-default"
                type="button"
                onClick=this.submitPhoneNumber
              >
                <IntlMessages id="profile.button.update" />
              </button>
            </div>
          </form>
)

【问题讨论】:

您是否尝试通过Postman 发布并查看回复? 【参考方案1】:

追加 Utsav 的回答

axios帖子的授权部分必须是这样的。

const response = api.post(
  "https://theappsouk.com/api/Profile/SendVerificationSmsCode",
  
    phone_number: userdata.pnumber,
  ,
  
    headers:  Authorization: `Bearer $userdata.auth`     
  
);

【讨论】:

【参考方案2】:

你正在使用

const api = new Axios();

在下一行声明 Axios 但使用 axios。应该是哪个

const response = api.post(
  "https://theappsouk.com/api/Profile/SendVerificationSmsCode",
  
    phone_number: userdata.pnumber,
  ,
  
    Authorization: `Bearer $userdata.auth`,
  
);

【讨论】:

【参考方案3】:

你可以使用拦截器

axios.interceptors.request.use(function (req) 
    // Do something before request is sent
    
    auth = localStorage.getItem('auth') !== null ? localStorage.getItem('auth') : '';
    req.headers['Content-Type'] = 'application/json';
    req.headers['Authorization'] = 'Bearer '.concat(auth);
    req.url = 'http://www.sample.com/api/'.concat(req.url);
    return req ;
  , function (error) 
    // Do something with request error
    return Promise.reject(error);
);

【讨论】:

以上是关于如何解决使用redux的react js中的401错误。?的主要内容,如果未能解决你的问题,请参考以下文章

如何解决 redux-persist 创建同步存储失败。回退到 React.js 中的 noop 存储

使用 redux-saga 和 fetch 自动处理 401 响应

如何从 react.js 中的 redux 存储向引导表插入数据?

Webpack devserver代理,如何避免401错误?

如何在 App.js (React-Native) 中访问 redux 状态

React.js/Redux:Reducers 中的 setInterval 和 clearInterval