我正在使用Facebook的Javascript SDK进行身份验证.我已经能够正确导入SDK,并在我的页面上放置一个Like按钮.但是,facebook登录按钮必须包装在标签中:

<fb:login-button/>

目前,我已经将Facebook Login tutorial中的所有代码粘贴到了我的索引中.html,我的项目中唯一的html文件,其中包含React应用程序.但是,我需要将最后一部分(带有实际的登录按钮)放入我的React组件中.当我try 这样做时,我得到了以下错误:

ReactifyError: /Users/ritmatter/reps/js/components/Signup.jsx: Parse Error: Line 82: Unexpected end of input while parsing file: /Users/ritmatter/reps/js/components/Signup.jsx
sdk.js:61 The "fb-root" div has not been created, auto-creating
ping?client_id=894010190618709&domain=localhost&origin=1&redirect_uri=http%3A%2F%2Fstatic.ak.facebo…:1 Given URL is not allowed by the Application configuration.: One or more of the given URLs is not allowed by the App's settings.  It must match the Website URL or Canvas URL, or the domain must be a subdomain of one of the App's domains.

如何让登录按钮进入react?

推荐答案

我已经找到了如何使用ReactJS修改Facebook登录API教程的方法.我希望这能帮助其他正在努力解决这个问题的人.

首先,在需要登录链接的react组件中,包含以下代码:

componentDidMount: function() {
  window.fbAsyncInit = function() {
    FB.init({
      appId      : '<YOUR_APP_ID>',
      cookie     : true,  // enable cookies to allow the server to access
                        // the session
      xfbml      : true,  // parse social plugins on this page
      version    : 'v2.1' // use version 2.1
    });

    // Now that we've initialized the JavaScript SDK, we call
    // FB.getLoginStatus().  This function gets the state of the
    // person visiting this page and can return one of three states to
    // the callback you provide.  They can be:
    //
    // 1. Logged into your app ('connected')
    // 2. Logged into Facebook, but not your app ('not_authorized')
    // 3. Not logged into Facebook and can't tell if they are logged into
    //    your app or not.
    //
    // These three cases are handled in the callback function.
    FB.getLoginStatus(function(response) {
      this.statusChangeCallback(response);
    }.bind(this));
  }.bind(this);

  // Load the SDK asynchronously
  (function(d, s, id) {
    var js, fjs = d.getElementsByTagName(s)[0];
    if (d.getElementById(id)) return;
    js = d.createElement(s); js.id = id;
    js.src = "//connect.facebook.net/en_US/sdk.js";
    fjs.parentNode.insertBefore(js, fjs);
  }(document, 'script', 'facebook-jssdk'));
},

// Here we run a very simple test of the Graph API after login is
// successful.  See statusChangeCallback() for when this call is made.
testAPI: function() {
  console.log('Welcome!  Fetching your information.... ');
  FB.api('/me', function(response) {
  console.log('Successful login for: ' + response.name);
  document.getElementById('status').innerHTML =
    'Thanks for logging in, ' + response.name + '!';
  });
},

// This is called with the results from from FB.getLoginStatus().
statusChangeCallback: function(response) {
  console.log('statusChangeCallback');
  console.log(response);
  // The response object is returned with a status field that lets the
  // app know the current login status of the person.
  // Full docs on the response object can be found in the documentation
  // for FB.getLoginStatus().
  if (response.status === 'connected') {
    // Logged into your app and Facebook.
    this.testAPI();
  } else if (response.status === 'not_authorized') {
    // The person is logged into Facebook, but not your app.
    document.getElementById('status').innerHTML = 'Please log ' +
      'into this app.';
  } else {
    // The person is not logged into Facebook, so we're not sure if
    // they are logged into this app or not.
    document.getElementById('status').innerHTML = 'Please log ' +
    'into Facebook.';
  }
},

// This function is called when someone finishes with the Login
// Button.  See the onlogin handler attached to it in the sample
// code below.
checkLoginState: function() {
  FB.getLoginStatus(function(response) {
    this.statusChangeCallback(response);
  }.bind(this));
},

handleClick: function() {
  FB.login(this.checkLoginState());
},

然后,在渲染方法中,确保有一些HTML将调用handleClick:

<a href="#" onClick={this.handleClick}>Login</a>

注意,这与教程中的代码相同,但放在ReactJS组件中.唯一的区别是,您必须战略性地绑定它,使Facebook API函数成为react组件的一部分.此登录将以从FB给出的响应中解析的响应消息结束.getLoginStatus().您还可以从该响应对象中取出令牌,并将其发送到后端,以便使用passport-facebook-token之类的值进行身份验证.

Reactjs相关问答推荐

避风港访问端口以包含Reaction应用程序

Reaction中的数据加载不一致

React Router:在没有手动页面刷新的情况下,路由不会更新内容

无法使用Reaction日期选取器和Next.js设置初始日期

页面永远加载API/从数据库获取数据

使用Ionic 7和React 18,如何访问历史对象以在页面之间导航?

在任何渲染之前在ReactJs中获取数据

Chart.js如何go 除边框

React 为什么标签导致 onClick 事件运行 2 次?

如何在 TimePicker 中更改时钟 colored颜色 和确定按钮字体 colored颜色 - MUI React

Reactjs:MUI5:MobileDateTimePicker API:如何自定义日历中的文本

如何根据用户在react.js中的 Select , Select 多个心形图标?

如何让 useEffect 在 React.JS 中只运行一次?

运行 npm run build 出现问题

下一个js如何从另一个组件更新组件?

如何到达类组件中的状态?

antd 找不到 comments

React-Native PDF 注释

在 React Navigation 6 上注销后登录屏幕呈现两次

React 在 Docker 上运行,但公共 IP 无法访问