Google стремится к продвижению расового равенства для чернокожего населения. Смотри как.
Эта страница была переведа с помощью Cloud Translation API.
Switch to English

Аутентифицировать с Firebase Использование электронной почты Ссылка на JavaScript

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

Есть множество преимуществ для подписания в по электронной почте:

  • Низкое трение регистрации и входа в систему.
  • Снижение риска повторного использования паролей между приложениями, которые могут подорвать безопасность даже хорошо выбранных паролей.
  • Возможность аутентификация пользователя, а также проверки того, что пользователь является законным владельцем адреса электронной почты.
  • Пользователю необходимо только доступную учетную запись электронной почты для входа. Счёт требуется никаких прав собственности на номер телефона или социальных медиа.
  • Пользователь может подписать надежно без необходимости предоставления (или вспомнить) пароль, который может быть громоздким на мобильном устройстве.
  • Существующий пользователь, который ранее подписал с использованием идентификатора электронной почты (пароль или федеративного) может быть повышен для входа в систему только по электронной почте. Например, пользователь, который забыл свой пароль еще может войти в системе без необходимости сброса пароля.

Прежде чем вы начнете

Если вы еще не сделали, скопируйте инициализации фрагмент из Firebase консоли для вашего проекта , как описано в Add Firebase к вашему проекту JavaScript .

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

  1. В Firebase консоли откройте раздел Auth.
  2. На вкладке Вход в метод, позволяют поставщику Email / пароль. Обратите внимание, что адрес электронной почты / пароль входа в должен быть включен для использования электронной почты ссылку входа.
  3. В том же разделе включить ссылку по электронной почте ( без пароля входа в) регистрации в методе.
  4. Нажмите кнопку Сохранить.

Для того, чтобы инициировать процесс аутентификации, предоставить пользователю интерфейс , который предлагает пользователю предоставить свой адрес электронной почты , а затем вызвать sendSignInLinkToEmail на запрос , что Firebase отправить ссылку аутентификации электронной почты пользователя.

  1. Построить ActionCodeSettings объект, который обеспечивает Firebase с инструкциями о том, как построить ссылку по электронной почте. Установить следующие поля:

    • url : Глубинная ссылка врезать и любое дополнительное состояние, которые передаются вместе. Домен Линка должен быть белый список в списке Firebase консоли уполномоченных доменов, которые можно найти, перейдя в Знаменском-во вкладке метода (Аутентификация -> Вход в метод).
    • android и ios : Приложения для использования при регистрации в ссылке открывается на устройстве Android или IOS. Узнайте больше о том , как настроить Firebase Dynamic Links для открытых ссылок по электронной почте действия с помощью мобильных приложений.
    • handleCodeInApp : Установите верно. Знак в эксплуатации должен всегда быть завершен в приложении, в отличии от других вне диапазона действия электронной почты (сброса пароля и электронной проверки). Это происходит потому, что, в конце потока, пользователь, как ожидается, будет подписан в их состоянии Auth сохраняется в приложении.
    • dynamicLinkDomain : Если несколько доменов пользовательских динамически подключаемых определены для проекта, указать , какой из них использовать , когда канал будет открыт с помощью указанного мобильного приложения (например, example.page.link ). В противном случае будет автоматически выбран первый домен.
    
    var actionCodeSettings = {
      // URL you want to redirect back to. The domain (www.example.com) for this
      // URL must be whitelisted in the Firebase Console.
      url: 'https://www.example.com/finishSignUp?cartId=1234',
      // This must be true.
      handleCodeInApp: true,
      iOS: {
        bundleId: 'com.example.ios'
      },
      android: {
        packageName: 'com.example.android',
        installApp: true,
        minimumVersion: '12'
      },
      dynamicLinkDomain: 'example.page.link'
    };
    

    Чтобы узнать больше о ActionCodeSettings, обратитесь к Passing государства в электронной Actions разделе.

  2. Попросите пользователя для своей электронной почты.

  3. Отправить ссылку аутентификации электронной почты пользователя, и сохранить электронную почту пользователя в случае, если пользователь завершает электронный знак-в на одном устройстве.

    
    firebase.auth().sendSignInLinkToEmail(email, actionCodeSettings)
      .then(function() {
        // The link was successfully sent. Inform the user.
        // Save the email locally so you don't need to ask the user for it again
        // if they open the link on the same device.
        window.localStorage.setItem('emailForSignIn', email);
      })
      .catch(function(error) {
        // Some error occurred, you can inspect the code: error.code
      });
    

проблемы безопасности

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

Вы можете ускорить этот поток для пользователей, открывающих вход в ссылке на одном устройстве они просят ссылку, за счетом хранения их адресов электронной почты локально - например, используя LocalStorage или печенье - при отправке входа в электронной почте. Затем, используя этот адрес, чтобы завершить поток. Не передать электронную почту пользователя в параметрах перенаправления URL и повторно использовать его, так как это может позволить сессии инъекции.

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

Также убедитесь, что вы используете HTTPS URL в производстве, чтобы избежать вашей ссылки быть потенциально перехвачена промежуточными серверами.

Завершение вход в аккаунт на веб-странице

Формат электронной связи глубокой связи является таким же , как формат , используемым для из группы действий по электронной почте ( адрес электронной проверки, сброс пароля и изменение отзыва электронной почты). Firebase Auth упрощает эту проверку, предоставляя isSignInWithEmailLink API , чтобы проверить ссылку , является ли вход с помощью электронной связи.

Для завершения регистрации в целевой странице, вызовите signInWithEmailLink с электронной почтой пользователя и фактической ссылкой электронной почты , содержащей одноразовый кодом.


// Confirm the link is a sign-in with email link.
if (firebase.auth().isSignInWithEmailLink(window.location.href)) {
  // Additional state parameters can also be passed via URL.
  // This can be used to continue the user's intended action before triggering
  // the sign-in operation.
  // Get the email if available. This should be available if the user completes
  // the flow on the same device where they started it.
  var email = window.localStorage.getItem('emailForSignIn');
  if (!email) {
    // User opened the link on a different device. To prevent session fixation
    // attacks, ask the user to provide the associated email again. For example:
    email = window.prompt('Please provide your email for confirmation');
  }
  // The client SDK will parse the code from the link for you.
  firebase.auth().signInWithEmailLink(email, window.location.href)
    .then(function(result) {
      // Clear email from storage.
      window.localStorage.removeItem('emailForSignIn');
      // You can access the new user via result.user
      // Additional user info profile not available via:
      // result.additionalUserInfo.profile == null
      // You can check if the user is new or existing:
      // result.additionalUserInfo.isNewUser
    })
    .catch(function(error) {
      // Some error occurred, you can inspect the code: error.code
      // Common errors could be invalid email and invalid or expired OTPs.
    });
}

Завершение входа в в мобильном приложении

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

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

Чтобы узнать , как более о том , как обрабатывать вход с помощью электронной связи в приложении IOS, обратитесь к руководству IOS .

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

Разница будет во второй половине операции:


// Construct the email link credential from the current URL.
var credential = firebase.auth.EmailAuthProvider.credentialWithLink(
    email, window.location.href);

// Link the credential to the current user.
firebase.auth().currentUser.linkWithCredential(credential)
  .then(function(usercred) {
    // The provider is now successfully linked.
    // The phone user can now sign in with their phone number or email.
  })
  .catch(function(error) {
    // Some error occurred.
  });

Это также может быть использовано для повторной аутентификации пользователя электронной почты ссылки перед запуском чувствительной операции.


// Construct the email link credential from the current URL.
var credential = firebase.auth.EmailAuthProvider.credentialWithLink(
    email, window.location.href);

// Re-authenticate the user with this credential.
firebase.auth().currentUser.reauthenticateWithCredential(credential)
  .then(function(usercred) {
    // The user is now successfully re-authenticated and can execute sensitive
    // operations.
  })
  .catch(function(error) {
    // Some error occurred.
  });

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

В случае , если вы поддерживаете как пароль и ссылку на основе вход с помощью электронной почты, чтобы дифференцировать метод входа в для пользователя пароль / ссылки, используйте fetchSignInMethodsForEmail . Это полезно для идентификатора-первых потоков, где пользователь сначала попросил предоставить свою электронную почту, а затем преподносит метод входа в:

// After asking the user for their email.
var email = window.prompt('Please provide your email');
firebase.auth().fetchSignInMethodsForEmail(email)
  .then(function(signInMethods) {
    // This returns the same array as fetchProvidersForEmail but for email
    // provider identified by 'password' string, signInMethods would contain 2
    // different strings:
    // 'emailLink' if the user previously signed in with an email/link
    // 'password' if the user has a password.
    // A user could have both.
    if (signInMethods.indexOf(
            firebase.auth.EmailAuthProvider.EMAIL_PASSWORD_SIGN_IN_METHOD) != -1) {
      // User can sign in with email/password.
    }
     if (signInMethods.indexOf(
             firebase.auth.EmailAuthProvider.EMAIL_LINK_SIGN_IN_METHOD) != -1) {
       // User can sign in with email/link.
    }
  })
  .catch(function(error) {
    // Some error occurred, you can inspect the code: error.code
  });
}

Как описано выше , по электронной почте / пароль и адрес электронной / ссылки считаются одинаковыми firebase.auth.EmailAuthProvider (такой же PROVIDER_ID ) с различными методами входа.

Следующие шаги

После того, как пользователь в первый раз, новая учетная запись пользователя создана и связана с мандатным-то есть, имя пользователя и пароля, номер телефона или Идент поставщик информацией пользователя, подписанный в с. Этот новый счет хранятся как часть вашего проекта Firebase, и может быть использован для идентификации пользователя через каждое приложение в вашем проекте, независимо от того, как знаков пользователя в.

  • В приложениях, рекомендуемый способ узнать статус аутентификации вашего пользователя, чтобы установить наблюдатель на Auth объекте. Вы можете получить основную информацию о профиле пользователя от User объекта. См Управление пользователей .

  • В вашей базе данных в реальном времени и Firebase Cloud Storage правил безопасности , вы можете получить подписанный в уникальном пользователя идентификатор пользователя из auth переменной и использовать его , чтобы контролировать , какие данные пользователь заходит может.

Вы можете позволить пользователям входить в ваше приложение с помощью нескольких поставщиков проверки подлинности с помощью ссылки AUTH учетных данных поставщика к существующему учетной записи пользователя.

Чтобы выйти пользователь, вызовите signOut :

firebase.auth().signOut().then(function() {
  // Sign-out successful.
}).catch(function(error) {
  // An error happened.
});