Аутентификация на Firebase с номером телефона

Я пошёл, хотя документ Firebase, и кажется, что нам нужно предоставить электронное письмо для аутентификации пользователя.

Однако я полагаюсь на номер телефона.

Есть ли способ сделать это?

Ответ 1

Firebase теперь поддерживает auth с помощью номера телефона: https://firebase.google.com/docs/auth/web/phone-auth

UPDATE: Ссылка на официальную документацию, поэтому просьба прочитать там все инструкции, потому что.

Я бы порекомендовал использовать библиотеку firebaseui, которая будет использовать все файлы UI для авторизации. Вот веб-версия: https://github.com/firebase/firebaseui-web Есть также некоторые для Android и iOS проектов.

Вот также демонстрационное приложение, которое вы можете использовать, чтобы запустить свой собственный: https://github.com/TarikHuber/react-most-wanted

В нем также есть демонстрационная версия: https://www.react-most-wanted.com/ Вы можете попробовать все методы auth.

Фактическая реализация довольно проста, если вы используете firebaseui. Вот мой в компоненте React.

import React, {Component} from 'react';
import PropTypes from 'prop-types';
import { connect } from 'react-redux';
import {injectIntl} from 'react-intl';
import { Activity } from '../../components/Activity';
import muiThemeable from 'material-ui/styles/muiThemeable';
import { push } from 'react-router-redux';
import firebase from 'firebase';
import firebaseui from 'firebaseui';
import {firebaseAuth} from '../../utils/firebase';

var authUi = new firebaseui.auth.AuthUI(firebaseAuth);

class SignIn extends Component {

  componentDidMount() {
    const {router, browser}= this.props;

    const redirect =((router || {}).location || {}).search;

    var uiConfig = {
      signInSuccessUrl: redirect.slice(1),
      signInFlow: browser.greaterThan.medium?'popup':'redirect',
      callbacks: {
        signInSuccess: function(user, credentials, redirect) {

          push(redirect || '/');

          //To avoid page reload on single page applications
          return false;
        }
      },
      signInOptions: [
        firebase.auth.GoogleAuthProvider.PROVIDER_ID,
        firebase.auth.FacebookAuthProvider.PROVIDER_ID,
        firebase.auth.TwitterAuthProvider.PROVIDER_ID,
        firebase.auth.GithubAuthProvider.PROVIDER_ID,
        firebase.auth.EmailAuthProvider.PROVIDER_ID,
        firebase.auth.PhoneAuthProvider.PROVIDER_ID
      ]
    };

    authUi.start('#firebaseui-auth', uiConfig);
    
  }

  componentWillUnmount() {
    authUi.reset();
  }

  render(){

    const  {intl} = this.props;

    return (
      <Activity
        title={intl.formatMessage({id: 'sign_in'})}>
        <div style={{paddingTop: 35, width: '100%'}}>
          <div id="firebaseui-auth" style={{width: '100%'}}></div>
        </div>
      </Activity>
    );

  }

}


SignIn.propTypes = {
  push: PropTypes.func.isRequired,
  intl: PropTypes.object.isRequired,
  router: PropTypes.object.isRequired,
  muiTheme: PropTypes.object.isRequired,
};


const mapStateToProps = (state) => {
  const {router, browser } = state;
  return {
    router,
    browser
  };
};


export default connect(
  mapStateToProps,
  { push}
)(injectIntl(muiThemeable()(SignIn)));

Ответ 2

Просто наткнулся на этот вопрос.. вы можете просто добавить свой домен в конец номера телефона и по-прежнему делать это по электронной почте. [email protected] Обязательно добавьте это для регистрации и входа в систему. Это то, что я делаю. Единственным недостатком этого подхода является то, что вы не можете использовать функциональные возможности firebase, чтобы отправлять пользователям пароли reset. Для этого вам необходимо реализовать свой собственный сервис.

Ответ 3

Вы можете использовать пользовательский токен, который является абсолютно произвольным значением

firebase doc

Ответ 4

У меня есть разные вещи. Я должен разрешить моим пользователям выполнять логин по почте и номеру телефона. Вот как я это делаю:

Храните адрес электронной почты и номер телефона отдельно в базе данных Firebase.

Теперь для входа по электронной почте и паролю:

  • Использование встроенного метода signInWithEmailAndpassword

Для входа в систему по телефону нет и пароль:

  • Получить идентификатор электронной почты пользователя из базы данных Firebase, передав предоставленный пользователем номер телефона
  • Если идентификатор электронной почты не возвращается, сообщите об ошибке, что номер телефона не сопоставлен ни с одной учетной записью, ни с учетной записью не существует.
  • После получения идентификатора электронной почты вызовите signInWithEmailAndpassword и передайте полученный адрес электронной почты и пароль, предоставленный пользователем

Это всего лишь обходной путь, который я нашел. Я все еще могу использовать reset функцию паролей Firebase:)