【问题标题】:How to implement phone number verification in flutter using firebase? (Not Authentication)如何使用firebase在flutter中实现电话号码验证? (非认证)
【发布时间】:2019-08-29 07:29:33
【问题描述】:

如何使用 Firebase 在 Flutter 中实现电话号码验证?我的应用需要在某个时间点验证电话号码。不需要通过电话号码进行身份验证。我只需要验证我的号码。我如何实现它?

【问题讨论】:

    标签: firebase flutter firebase-authentication phone-number


    【解决方案1】:

    在 Firebase 中,电话号码验证也会自动对用户进行身份验证。如果不让用户登录,就无法使用 Firebase 身份验证来验证用户的电话号码。

    【讨论】:

    • 能否推荐第三方的电话号码验证插件
    • 这样的建议在 Stack Overflow 上是题外话,因为它们往往会吸引固执己见的答案和讨论。但 Google 搜索可能会为您提供不错的选择。
    • 如果我已经为一个用户创建了一个账号,然后进行电话认证(用户已经登录),会不会创建一个新的用户账号?或者这是否可以验证电话号码,并且恰好让他们登录(即使他们已经登录了)。另一种询问方式是,除了电子邮件/密码之外,是否可以让他们通过电话进行身份验证?
    【解决方案2】:

    手动进行,使用PhoneNumberUtil 类和代码中的手动方法来验证国家/地区代码

    在这种情况下,该方法检查号码的国家代码,我指定只允许国家代码为“KE”的肯尼亚号码

     _checkPhoneNumber() async {
    var s = phoneTextFieldController.text;
    bool isValid;
    if (s.length == 0) {
      isValid = true;
      setState(() {
        _isPhoneNumber = isValid;
      });
      return;
    }
     //check if the number starts with '0' , or '07' or '254'
    if (s.length < 10) {
      isValid = s.length == 1 && s[0] == '0' ||
          s.length > 1 && s[0] + s[1] == '07' ||
          s.length > 1 && s[0] + s[1] + s[2] == '254' ||
          s.length > 1 && s[0] + s[1] + s[2] + s[3] == '+254';
      setState(() {
        _isPhoneNumber = isValid;
      });
    
      return;
    }
    
    isValid =
        await PhoneNumberUtil.isValidPhoneNumber(phoneNumber: s, isoCode: 'KE');
    String normalizedNumber = await PhoneNumberUtil.normalizePhoneNumber(
        phoneNumber: s, isoCode: 'KE');
    RegionInfo regionInfo =
        await PhoneNumberUtil.getRegionInfo(phoneNumber: s, isoCode: 'KE');
    
    setState(() {
      _isPhoneNumber = isValid;
    });
    }
    

    然后在你的表单中有

    child: TextFormField(
                              onChanged: (text) {
                                _checkPhoneNumber();
                              },
                              controller: phoneTextFieldController,
                              keyboardType: TextInputType.phone,
    
                              validator: (val) {
                                if (val == '') {
                                  return 'Phone Number is required';
                                }
                                if (!_isPhoneNumber) {
                                  return 'Phone Number format error';
                                }
                              },
                              decoration: InputDecoration(
                                  hintText: "2547xx xxx xxx - Phone",
                                  border: InputBorder.none,
                                  icon: const Icon(
                                    Icons.phone,
                                  ),
                                  labelText: 'Phone',
                                  prefixText: '     ',
                                  suffixStyle:
                                      const TextStyle(color: Colors.green)),
                              onSaved: (value) {
                                phoneNumberForm = value;
                              },
                            )),
    

    然后在表单提交时检查表单状态

     buttonCustom(
                      color: Color(0xFF4458be),
                      heigth: 50.0,
                      txt: contactIdParam!=null ?"Submit Edit":"Submit",
                      ontap: () {
                        final _form = form.currentState;
                        if (_form.validate()) {
                          if(contactIdParam!=null){
                             _editContactRequest();
                          }else{
                            _addContactRequest();
    
                          }
    
                        } else {
                          print('form is invalid');
                        }
                      },
                    ),
    

    注意:从我的工作代码中复制了 sn-ps 我的验证将与您想要的不同,但您需要的只是逻辑

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-11
      • 2020-01-22
      • 2017-11-06
      • 1970-01-01
      • 2020-03-11
      • 1970-01-01
      相关资源
      最近更新 更多