【问题标题】:Firebase Authentication: Password must contain capital letterFirebase 身份验证:密码必须包含大写字母
【发布时间】:2018-01-02 19:52:51
【问题描述】:

我的应用程序与 firebase 数据库和身份验证相关联。

当用户创建帐户时,密码的唯一要求是 6 个字符。有没有办法让密码更复杂,比如让他们有一个大写字母和一个数字。

我可以直接从 firebase 执行此操作,还是需要从我的代码执行此操作?

【问题讨论】:

  • 你到目前为止尝试了什么?你能告诉我们你的密码吗
  • 是的,您当然可以这样做。它将在前端完成,而不是在后端完成。在您的应用程序中,您可以编写一些字符串解析方法,确保字符串包含大写字母和数字
  • 如果您想直接从 firebase 执行此操作,您可能需要使用 firebase 规则。

标签: swift firebase firebase-realtime-database firebase-authentication


【解决方案1】:

无法配置 Firebase 身份验证的密码强度规则。

另见

您可以(并且应该)从您的代码中限制它。但是您无法阻止恶意用户通过直接调用 API 来绕过这一点。

如果密码强度对您的应用来说是一项硬性要求,请考虑实施custom authentication。这个example of custom username (instead of email) and password authentication 可能会有所帮助。

【讨论】:

    【解决方案2】:

    使用此功能。它包括范围 6-15,即最少 6 个和最多 15 个字符。一个大写字母,一个数字。

    func isValidPasswordString(pwdStr:String) -> Bool {
    
        let pwdRegEx = "(?:(?:(?=.*?[0-9])(?=.*?[-!@#$%&*ˆ+=_])|(?:(?=.*?[0-9])|(?=.*?[A-Z])|(?=.*?[-!@#$%&*ˆ+=_])))|(?=.*?[a-z])(?=.*?[0-9])(?=.*?[-!@#$%&*ˆ+=_]))[A-Za-z0-9-!@#$%&*ˆ+=_]{6,15}"
    
        let pwdTest = NSPredicate(format:"SELF MATCHES %@", pwdRegEx)
        return pwdTest.evaluate(with: pwdStr)
    }
    

    对于有效的密码字符串,此函数将返回 true

    【讨论】:

    • 这确实会强制应用程序的用户输入与正则表达式匹配的密码。但恶意用户可以从应用程序中提取 Firebase 配置数据,然后自己调用 API。他们将绕过此检查,从而能够创建密码与正则表达式不匹配的用户。请参阅my answer 了解不存在此问题但确实要求您创建自定义身份提供者的替代解决方案。
    猜你喜欢
    • 2020-05-16
    • 2017-08-11
    • 2016-02-08
    • 2012-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-14
    • 1970-01-01
    相关资源
    最近更新 更多