Подтвердить что ты не робот

Использование кнопки входа в Google с реагированием

Я пытаюсь использовать знак google в реагирующем приложении. При использовании кнопки входа в систему, которая находится вне самого приложения, отлично работает, когда вы используете его в составе настраиваемого компонента SignIn, я не могу заставить его работать должным образом. Когда пользователь заходит, сама кнопка должна выполнить метод data-onsuccess. Проблема в том, что выполнение никогда не достигает этого метода, даже если знак работает.

Вероятно, мне не хватает некоторых ответов, но я не могу найти его. Любая помощь? Найдите ниже html, который загружает все и сам компонент.

<head>
    <meta name="google-signin-scope" content="profile email">
    <meta name="google-signin-client_id" content="1234-real-client-id.apps.googleusercontent.com">
    <script src="https://apis.google.com/js/platform.js" async defer></script>
</head>
<body>
    <!-- Here is where everything gets displayed -->
    <div id="app"></div>

    <!-- The file with the js code -->
    <script src="/js/main.js"></script>
</body>


var SignIn = React.createClass({
    onSignIn : function (google_user) {
        // I want this method to be executed
    },

    render : function() {
        return (
            <div className="g-signin2" data-onsuccess={this.onSignIn} data-theme="dark" />
        );
    }
});

Обратите внимание, что я не вставлял сюда нерелевантный код;)

4b9b3361

Ответ 1

Попробуйте добавить обратный вызов onSuccess при инициализации компонента в componentDidMount().

componentDidMount: function() {
  gapi.signin2.render('g-signin2', {
    'scope': 'https://www.googleapis.com/auth/plus.login',
    'width': 200,
    'height': 50,
    'longtitle': true,
    'theme': 'dark',
    'onsuccess': this. onSignIn
  });  
},
...

Ответ 2

Мне нужно было использовать это в функциональном компоненте, поэтому я решил поделиться тем, как я его адаптировал, мне нужно было использовать useEffectHook, который можно использовать вместо componentDidMount

  useEffect(() => {
    window.gapi.signin2.render('g-signin2', {
      'scope': 'https://www.googleapis.com/auth/plus.login',
      'width': 200,
      'height': 50,
      'longtitle': true,
      'theme': 'dark',
      'onsuccess': onSignIn
    })
  })

Ответ 3

Теперь вы можете использовать этот пакет React Google Login NPM, который включает в себя всю работу по настройке. Вы можете просто передать параметры только компоненту.

import React from 'react';
import ReactDOM from 'react-dom';
import GoogleLogin from 'react-google-login';
// or
import { GoogleLogin } from 'react-google-login';
 
 
const responseGoogle = (response) => {
  console.log(response);
}
 
ReactDOM.render(
  <GoogleLogin
    clientId="658977310896-knrl3gka66fldh83dao2rhgbblmd4un9.apps.googleusercontent.com"
    buttonText="Login"
    onSuccess={responseGoogle}
    onFailure={responseGoogle}
    cookiePolicy={'single_host_origin'}
  />,
  document.getElementById('googleButton')
);

Ответ 4

Я не могу прокомментировать такую ​​публикацию как ответ...

Я реализую то же самое и вижу ту же проблему. Я также добавил ссылку для выхода:

<a href="#" onClick={this.signOut}>Sign out</a>

signOut: function() {
  console.log("user signing out")
  var auth2 = gapi.auth2.getAuthInstance();
  auth2.signOut().then(function () {
    console.log('User signed out.');
  });
},

Функция выписки работает, но реализация Brad Решение:

Uncaught ReferenceError: gapi is not defined

предполагая, что в этот момент google lib еще не загружен. Возможно ли это, или я что-то упускаю из-за сферы охвата gapi?

--- EDIT: теперь задан автономный вопрос: Использование кнопки входа в Google с ответом 2