Запретить создание учетной записи пользователя с помощью входа по электронной почте в FireStore - PullRequest
0 голосов
/ 13 октября 2018

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

https://firebase.google.com/docs/auth/web/email-link-auth

После того, как пользователь подписываетв первый раз создается новая учетная запись пользователя и привязывается к учетным данным ...

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

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

Что-то вроде

 firebase.auth().sendLoginLinkToEmail(email,{url:...,handleCodeInApp:true}).then(() =>{
    ....
  }, error =>{
     // return if not an authenticated user
  })

И если email не зарегистрирован, то он возвращает ошибку.

Идея состоит в том, чтобы иметь администратора, который создает пользователей, а затем эти созданные пользователи просто входят в систему с помощьюссылка электронной почты (без пароля)

Возможно ли это?Чтобы запретить firebase создавать учетную запись с .signInWithEmailLink()?

1 Ответ

0 голосов
/ 13 октября 2018

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

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

Firebase Authentication (как следует из названия) заботится только об аутентификации.Вам придется обрабатывать авторизацию в других местах, в зависимости от того, к каким сервисам вы предоставляете доступ пользователям.

Что делает электронную почту "зарегистрированной" в вашем приложении?Т.е. где админ создает этих пользователей?Например, если вы храните пользователей в Cloud Firestore в коллекции allowed_users, с такими документами:

allowed_users: // collection
  "arkade@domain,com": { ... } // document
  "puf@domain,com": { ... } // document

Теперь вы можете ограничить доступ только к другим разрешенным пользователям.данные с правилами безопасности на стороне сервера Firestore.Допустим, у вас есть коллекция posts, вы можете разрешить только этим пользователям читать сообщения с:

service cloud.firestore {
  match /databases/{database}/documents {
    match /posts/{post} {
      // Make sure a 'allowed_users' document exists for the requesting user before
      // allowing any reads from the 'posts' collection
      allow read: if exists(/databases/$(database)/documents/allowed_users/$(request.auth.email))
  }
}

Синтаксис немного длинный, но вы можете видеть, что он разрешает только чтение сообщенияесли адрес электронной почты текущего пользователя (request.auth.email) существует как документ в allowed_users.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...