【问题标题】:How to authenticate CloudKit JS in react JS or React-Redux JS如何在 React JS 或 React-Redux JS 中验证 CloudKit JS
【发布时间】:2016-08-08 17:18:46
【问题描述】:

我对 Web 开发非常陌生。 我已经下载了 CloudKit JS 并在脚本标签中添加了 index.html。而且我确保它在我的 react-redux bundle JS 之前加载。

  <script src="/cloudkit.js"></script>
  <script src="/bundle.js"></script>

我已经制作了单类组件,并且我正在对组件进行身份验证,并安装如下。

componentWillMount() {
CloudKit.configure({
  containers: [{
    containerIdentifier: '<container ID>',
    apiToken: '<secret api token>',
    environment: 'development'
  }]
});
var container = CloudKit.getDefaultContainer();
container.setUpAuth().then(function(userInfo) {
  if(userInfo) {
            console.log(userInfo);
        } else {
            console.log('need to login');
        }
    });
}

然后我得到以下错误 如何使用 CloudKit JS 在 React 中进行身份验证?

【问题讨论】:

  • 你能尝试在 React 之外运行相同的代码吗?似乎只有 CloudKit 的问题
  • 我想在 React 中进一步使用 CloudKit 进行数据处理。身份验证只是一个开始。实际上从 CDN 异步加载脚本已经开始,但我已经下载到脚本以避免这个问题。

标签: node.js reactjs redux react-redux cloudkit-web-services


【解决方案1】:

421 是预期的:基本上这是 CloudKit JS 与服务器检查用户是否已登录。您仍然应该看到您的日志语句“需要登录”。

您还应该:

  • 提供要在其中呈现登录/注销按钮的 dom 元素。
  • componentDidMount 中调用container.setUpAuth 而不是componentWillMount(调用此方法时必须存在登录按钮的dom 元素)。

示例代码 (https://jsfiddle.net/byb7ha0o/4/):

CloudKit.configure({
  containers: [{
    containerIdentifier: '<container>',
    apiToken: '<token>',
    environment: 'development'
  }]
});
const container = CloudKit.getDefaultContainer();

class HelloCloudKitJS extends React.Component {

  constructor() {
    super();
    this.state = {
        userInfo: null
    }
  }

  componentDidMount() {
    container
      .setUpAuth()
        .then(userInfo => {
        if(userInfo) {
            this.setState({userInfo: userInfo});
          return;
        }
        container
          .whenUserSignsIn()
            .then(userInfo => {
                this.setState({userInfo: userInfo})
          })  
      })
  }

  render() {
    return <div>
      <div>
        <div id="apple-sign-in-button"></div>
        <div id="apple-sign-out-button"></div>
      </div>
    </div>;
  }
}

ReactDOM.render(
  <HelloCloudKitJS />,
  document.getElementById('container')
);

【讨论】:

  • 这个结论其实是我自己得出的。今天我是来删除问题的。但我想给你积分。感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 2020-09-03
  • 1970-01-01
  • 2020-07-07
  • 2016-09-22
  • 2021-11-15
  • 2020-06-11
  • 2020-03-26
  • 1970-01-01
相关资源
最近更新 更多