首页 文章

通过firestore中的电子邮件登录来阻止创建用户帐户

提问于
浏览
0

我已经使用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 回答

  • 2

    无密码电子邮件登录允许用户证明他们可以访问某个邮箱 . 它本身就没有做到这一点 . 用户点击该链接后,它们就是 authenticated . 除了启用/禁用整个登录提供程序之外,您无法控制谁可以登录/验证 .

    之后,由您的应用程序决定允许该用户执行的操作 . 这是一个单独的步骤,通常称为 authorization .

    Firebase身份验证(仅顾名思义)仅用于身份验证 . 您必须在其他地方处理授权,具体取决于您为用户提供的访问权限 .

    什么使您的应用中的电子邮件"registered"?即管理员在哪里创建这些用户?例如,如果您将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 中的文档存在,您可以看到只允许读取帖子 .

相关问题