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

Есть ли способ сделать подтверждение по электронной почте для создания пользователей Firebase и/или пароля reset?

Вопрос говорит все. В Firebase, как мне подтвердить адрес электронной почты, когда пользователь создает учетную запись или, если на то пошло, выполняет пароль reset по электронной почте.

Я мог бы попросить более широко: есть ли способ отправить электронные письма из Firebase? Например. уведомления и т.д. Это не то, что вы обычно делаете на стороне клиента.

4b9b3361

Ответ 1

Это нужно сделать за пределами firebase. Я храню пользователей в/users/и сохраняю статус на них (PENDING, ACTIVE, DELETED). У меня есть небольшой сервис, который контролирует пользователей статуса PENDING и отправляет электронное письмо с подтверждением. У меня есть ссылка на веб-сервис, который я создал для обновления статуса пользователя ACTIVE.

Ответ 2

Обновление

Обратите внимание, что это никогда не был очень безопасным способом обработки электронной почты, и поскольку Firebase теперь поддерживает проверку электронной почты, скорее всего, это должно быть использовано.

Оригинальный ответ

Я решил проверку электронной почты с помощью функции пароля reset.

При создании учетной записи я предоставляю пользователю временный (случайно сгенерированный) пароль. Затем я запускаю пароль reset, который отправит электронное письмо пользователю со ссылкой. Ссылка позволит пользователю установить новый пароль.

Для генерации случайного пароля вы можете использовать код, похожий на этот:

function () {
  var possibleChars = ['abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!?_-'];
  var password = '';
  for(var i = 0; i < 16; i += 1) {
    password += possibleChars[Math.floor(Math.random() * possibleChars.length)];
  }
  return password;
}

Обратите внимание, что это происходит на клиенте, поэтому злоумышленник может нарушить вашу логику.

Ответ 3

[Инженер в Firebase - Обновление 2014-01-27]

Firebase Simple Login теперь поддерживает сброс пароля для аутентификации по электронной почте/паролю.

Каждой из клиентских библиотек Simple Login был предоставлен новый метод для генерации паролей reset для указанного адреса электронной почты - sendPasswordResetEmail() в Интернете и Android и sendPasswordResetForEmail() на iOS.

Это электронное письмо будет содержать временный токен, который пользователь может использовать для входа в свою учетную запись и обновления своих учетных данных. Этот токен истекает через 24 часа или когда пользователь меняет свой пароль, в зависимости от того, что наступит раньше.

Также обратите внимание, что Firebase Simple Login позволяет полностью настраивать шаблон электронной почты, а также адрес отправки (включая белый цвет электронной почты из вашего домена для платных учетных записей).

Чтобы получить доступ к этой функции, вам необходимо обновить свою клиентскую библиотеку до версии v1.2.0 или выше. Чтобы захватить последнюю версию, проверьте https://www.firebase.com/docs/downloads.html.

Кроме того, ознакомьтесь с https://www.firebase.com/docs/security/simple-login-email-password.html для последних документов Firebase Simple Login - Web Client.

Ответ 4

Как и в 2016 году, вам может не понадобиться использовать ссылку reset и т.д. Просто используйте функции sendEmailVerification() и applyActionCode:

Короче говоря, ниже, в основном, как вы подходите к этому, в AngularJS:

// thecontroller.js
$scope.sendVerifyEmail = function() {
    console.log('Email sent, whaaaaam!');
    currentAuth.sendEmailVerification();
  }

// where currentAuth came from something like this:
// routerconfig

....
templateUrl: 'bla.html',
resolve: {
    currentAuth:['Auth', function(Auth) {
      return Auth.$requireSignIn() // this throws an AUTH_REQUIRED broadcast
    }]
  }
...

// intercept the broadcast like so if you want:

....

$rootScope.$on("$stateChangeError", function(event, toState, toParams, fromState, fromParams, error) {
      if (error === "AUTH_REQUIRED") {
        $state.go('login', { toWhere: toState });
       }
    });
....

// So user receives the email. How do you process the `oobCode` that returns?
// You may do something like this:

// catch the url with its mode and oobCode
.state('emailVerify', {
  url: '/verify-email?mode&oobCode',
  templateUrl: 'auth/verify-email.html',
  controller: 'emailVerifyController',
  resolve: {
    currentAuth:['Auth', function(Auth) {
      return Auth.$requireSignIn()
    }]
  }
})

// Then digest like so where each term is what they sound like:

.controller('emailVerifyController', ['$scope', '$stateParams', 'currentAuth', 'DatabaseRef',
  function($scope, $stateParams, currentAuth, DatabaseRef) {
    console.log(currentAuth);
    $scope.doVerify = function() {
      firebase.auth()
        .applyActionCode($stateParams.oobCode)
        .then(function(data) {
          // change emailVerified for logged in User
          console.log('Verification happened');
        })
        .catch(function(error) {
          $scope.error = error.message;
          console.log(error.message, error.reason)
        })
    };
  }
])

И оооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооо applyActionCode изменяет emailVerified на true с false.

Проверка электронной почты важна, когда пользователи вступают в систему с локальной учетной записью. Однако для многих социальных аутентификаций входящий emailVerified уже будет true.

Объяснено в статье Проверка электронной почты с помощью Firebase 3.0 SDK

Ответ 5

Что я сделал, чтобы обойти это, было использование Zapier, у которого встроенный API для firebase. Он проверяет местоположение для добавления дочерних элементов. Затем он берет адрес электронной почты и URL-адрес проверки из данных новых узлов и отправляет их вперед. URL-адрес указывает на мое приложение angular, которое устанавливает электронную почту пользователя как подтвержденное.

Когда я размещаю файлы приложений в firebase, мне не нужно заботиться о любых серверах или процессах, делающих опрос в фоновом режиме.

Есть задержка, но поскольку я не блокирую пользователей, прежде чем проверять почту, это нормально. У Zapier есть свободный уровень, и поскольку у меня нет большого трафика, это достойное решение на время.

Ответ 6

Новый Firebase SDK v3, похоже, поддерживает проверку адреса электронной почты, см. здесь (поместите свой собственный идентификатор проекта в ссылку), но он не 't, кажется, документирован еще.

Я задал вопрос о SO здесь

См. @SamQuayle, ответьте там эту ссылку на официальные документы.

Ответ 7

Я использовал следующий код для проверки проверки электронной почты после создания новой учетной записи.

let firAuth = FIRAuth.auth()
firAuth?.addAuthStateDidChangeListener { auth, user in
    if let loggedUser = user {

        if loggedUser.emailVerified == false {

            loggedUser.sendEmailVerificationWithCompletion({ (error) in

                print("error:\(error)")
            })
        }
        else {

            print(loggedUser.email)
        }
    } else {
        // No user is signed in.
        print("No user is signed in.")
    }
}

Ответ 8

Как отмечают другие, Firebase теперь поддерживает электронные письма, связанные с учетной записью, но еще лучше, по состоянию на 10 дней назад или так же поддерживает отправку любого вида электронной почты через Firebase Functions. Много деталей в docs и пример кода здесь.

Ответ 9

Я использовал MandrillApp. Вы можете создать ключ API, который позволяет отправлять только шаблон. Этот способ даже думал, что ваш ключ разоблачен, его нельзя действительно злоупотреблять, если кто-то не хочет увольнять тонны приветственных писем для вас.

Это был взлом, чтобы убрать меня с ног. Теперь я разрешаю CORS из EC2, который использует токен, чтобы проверить, существует ли пользователь, прежде чем расширять их приветствием через SES.