Xác thực điện thoại

chứng thực điện thoại cho phép người dùng đăng nhập vào căn cứ hỏa lực sử dụng điện thoại của họ là xác thực. Một tin nhắn SMS được gửi đến người dùng (sử dụng số điện thoại được cung cấp) có chứa một mã duy nhất. Một khi mã đã được ủy quyền, người dùng có thể đăng nhập vào căn cứ hỏa lực.

Số điện thoại mà người dùng cuối cung cấp để xác thực sẽ được gửi và lưu trữ bởi Google để cải thiện thư rác và ngăn chặn lạm dụng qua dịch vụ của Google, bao gồm, nhưng không giới hạn căn cứ hỏa lực. Các nhà phát triển phải đảm bảo họ có sự đồng ý của người dùng cuối phù hợp trước khi sử dụng đăng nhập căn cứ hỏa lực xác thực số điện thoại service.authentication

Căn cứ hỏa lực Điện thoại xác thực không được hỗ trợ trong tất cả các nước. Hãy xem họ Câu Hỏi Thường Gặp để biết thêm thông tin.

Cài đặt

Trước khi bắt đầu với điện thoại xác thực, đảm bảo bạn đã làm theo các bước sau:

  1. Kích hoạt tính năng điện thoại như một phương pháp Sign-In trong căn cứ hỏa lực console .
  2. Android : Nếu bạn chưa thiết lập của ứng dụng của bạn SHA-1 hash trong căn cứ hỏa lực console , làm như vậy. Xem xác thực khách hàng của bạn để biết thông tin về việc tìm kiếm của ứng dụng của bạn băm SHA-1.
  3. iOS : Trong Xcode, cho phép thông báo đẩy cho dự án của bạn và đảm bảo chính APN xác thực của bạn được cấu hình với căn cứ hỏa lực Cloud Messaging (FCM) . Để xem một lời giải thích sâu của bước này, xem các căn cứ hỏa lực iOS Điện thoại Auth tài liệu.
  4. Web : Đảm bảo rằng bạn đã thêm miền ứng dụng của bạn trên căn cứ hỏa lực console , thuộc lĩnh vực chuyển hướng OAuth .

Lưu ý ; Số điện thoại đăng nhập chỉ có sẵn để sử dụng trên các thiết bị thực và web. Để kiểm tra lưu lượng xác thực của bạn trên giả lập thiết bị, vui lòng xem thử .

Cách sử dụng

Các căn cứ hỏa lực xác thực SDK cho Flutter cung cấp hai cách cá nhân để ký sử dụng với số điện thoại của họ. Native (ví dụ như Android và iOS) nền tảng cung cấp chức năng khác nhau để xác nhận số điện thoại so với web, do đó hai phương pháp tồn tại cho mỗi nền tảng độc quyền:

  • VBulletin Quê quán: verifyPhoneNumber .
  • Nền tảng Web : signInWithPhoneNumber .

Quê quán: verifyPhoneNumber

Trên nền tảng bản địa, số điện thoại của người dùng phải được xác nhận đầu tiên và sau đó sử dụng một trong hai có thể đăng nhập hoặc liên kết tài khoản của họ với một PhoneAuthCredential .

Trước tiên, bạn phải nhắc nhở người dùng cho số điện thoại của họ. Khi được cung cấp, hãy gọi verifyPhoneNumber() phương pháp:

await FirebaseAuth.instance.verifyPhoneNumber(
  phoneNumber: '+44 7123 123 456',
  verificationCompleted: (PhoneAuthCredential credential) {},
  verificationFailed: (FirebaseAuthException e) {},
  codeSent: (String verificationId, int? resendToken) {},
  codeAutoRetrievalTimeout: (String verificationId) {},
);

Có 4 callbacks riêng biệt mà bạn phải xử lý, mỗi người sẽ xác định cách bạn cập nhật giao diện người dùng ứng dụng:

  1. verificationCompleted : Tự động xử lý của mã SMS trên các thiết bị Android.
  2. verificationFailed : Sự kiện Xử lý thất bại như số điện thoại không hợp lệ hay hạn ngạch SMS đã bị vượt quá.
  3. codeSent : Xử lý khi một mã đã được gửi đến điện thoại từ căn cứ hỏa lực, dùng để nhắc nhở người dùng nhập mã.
  4. codeAutoRetrievalTimeout : Xử lý một thời gian chờ của khi mã xử lý tin nhắn SMS tự động thất bại.

verificationCompleted

xử lý này sẽ chỉ được gọi là trên các thiết bị Android có hỗ trợ độ phân giải mã SMS tự động.

Khi mã SMS được gửi tới thiết bị, Android sẽ tự động xác minh mã SMS mà không đòi hỏi người dùng phải nhập bằng tay các mã. Nếu sự kiện này xảy ra, một PhoneAuthCredential được tự động cung cấp có thể được sử dụng để đăng nhập với hoặc liên kết với số điện thoại của người dùng.

FirebaseAuth auth = FirebaseAuth.instance;

await auth.verifyPhoneNumber(
  phoneNumber: '+44 7123 123 456',
  verificationCompleted: (PhoneAuthCredential credential) async {
    // ANDROID ONLY!

    // Sign the user in (or link) with the auto-generated credential
    await auth.signInWithCredential(credential);
  },
);

xác minh không hoàn thành

Nếu căn cứ hỏa lực trả về một lỗi, ví dụ cho một số điện thoại không chính xác hoặc nếu hạn ngạch SMS cho dự án đã vượt quá, một FirebaseAuthException sẽ được gửi đến xử lý này. Trong trường hợp này, bạn sẽ nhắc nhở một cái gì đó người dùng của bạn đã đi sai tùy thuộc vào mã lỗi.

FirebaseAuth auth = FirebaseAuth.instance;

await auth.verifyPhoneNumber(
  phoneNumber: '+44 7123 123 456',
  verificationFailed: (FirebaseAuthException e) {
    if (e.code == 'invalid-phone-number') {
      print('The provided phone number is not valid.');
    }

    // Handle other errors
  },
);

codeSent

Khi căn cứ hỏa lực sẽ gửi một mã SMS đến thiết bị, xử lý này được kích hoạt với một verificationIdresendToken (A resendToken chỉ được hỗ trợ trên các thiết bị Android, thiết bị iOS sẽ luôn luôn trả về một null giá trị).

Sau khi kích hoạt, nó sẽ là một thời điểm tốt để cập nhật giao diện người dùng ứng dụng của bạn để nhắc nhở người dùng nhập mã SMS họ đang mong đợi. Một khi các mã SMS đã được nhập, bạn có thể kết hợp ID xác nhận với mã SMS để tạo ra một mới PhoneAuthCredential :

FirebaseAuth auth = FirebaseAuth.instance;

await auth.verifyPhoneNumber(
  phoneNumber: '+44 7123 123 456',
  codeSent: (String verificationId, int? resendToken) async {
    // Update the UI - wait for the user to enter the SMS code
    String smsCode = 'xxxx';

    // Create a PhoneAuthCredential with the code
    PhoneAuthCredential credential = PhoneAuthProvider.credential(verificationId: verificationId, smsCode: smsCode);

    // Sign the user in (or link) with the credential
    await auth.signInWithCredential(credential);
  },
);

Theo mặc định, căn cứ hỏa lực sẽ không gửi lại một tin nhắn SMS mới nếu nó đã được thời gian gần đây gửi. Tuy nhiên bạn có thể thay đổi hành vi này bằng cách tái gọi verifyPhoneNumber phương pháp với gửi lại mã tự động cho các forceResendingToken tranh cãi. Nếu thành công, tin nhắn SMS sẽ được gửi lại.

codeAutoRetrievalTimeout

Trên các thiết bị Android có hỗ trợ độ phân giải mã SMS tự động, xử lý này sẽ được gọi nếu thiết bị đã không tự động giải quyết một tin nhắn SMS trong một khoảng thời gian nhất định. Một khi các khung thời gian đã trôi qua, các thiết bị sẽ không còn cố gắng giải quyết bất kỳ tin nhắn đến.

Theo mặc định, thiết bị chờ 30 giây tuy nhiên điều này có thể được tùy chỉnh với timeout đối số:

FirebaseAuth auth = FirebaseAuth.instance;

await auth.verifyPhoneNumber(
  phoneNumber: '+44 7123 123 456',
  timeout: const Duration(seconds: 60),
  codeAutoRetrievalTimeout: (String verificationId) {
    // Auto-resolution timed out...
  },
);

Web: signInWithPhoneNumber

Trên nền tảng web, người dùng có thể đăng nhập bằng cách xác nhận họ có quyền truy cập vào điện thoại bằng cách nhập mã SMS gửi đến số điện thoại được cung cấp. Cho thêm an ninh và ngăn chặn spam, người dùng được yêu cầu để chứng minh họ là con người bằng cách hoàn thành một Google reCAPTCHA widget. Khi đã xác nhận, mã SMS sẽ được gửi đi.

Các căn cứ hỏa lực xác thực SDK cho Flutter sẽ quản lý reCAPTCHA phụ tùng ra khỏi hộp theo mặc định, tuy nhiên cung cấp quyền kiểm soát nó như thế nào sẽ được hiển thị và cấu hình nếu cần thiết. Để bắt đầu, hãy gọi signInWithPhoneNumber phương pháp với số điện thoại.

FirebaseAuth auth = FirebaseAuth.instance;

// Wait for the user to complete the reCAPTCHA & for an SMS code to be sent.
ConfirmationResult confirmationResult = await auth.signInWithPhoneNumber('+44 7123 123 456');

Gọi phương pháp này đầu tiên sẽ kích hoạt các widget reCAPTCHA để hiển thị. Người sử dụng phải hoàn thành việc kiểm tra trước khi mã SMS được gửi đi. Sau khi hoàn thành, sau đó bạn có thể đăng ký người sử dụng trong bằng cách cung cấp mã SMS đến confirm phương pháp trên được giải quyết ConfirmationResult phản ứng:

UserCredential userCredential = await confirmationResult.confirm('123456');

Giống như khác đăng nhập dòng chảy, thông tin đăng nhập thành công sẽ kích hoạt bất kỳ người nghe trạng thái xác lập mà bạn đã đăng ký trong suốt ứng dụng của bạn.

reCAPTCHA Cấu hình

Các widget reCAPTCHA là một dòng chảy hoàn toàn quản lý cung cấp bảo mật cho ứng dụng web của bạn.

Đối số thứ hai của signInWithPhoneNumber chấp nhận một tùy chọn RecaptchaVerifier dụ có thể được sử dụng để quản lý các widget. Theo mặc định, widget sẽ làm như một widget vô hình khi luồng đăng nhập được kích hoạt. An "vô hình" widget sẽ xuất hiện như là một phương thức toàn trang trên đầu trang của ứng dụng của bạn.

Tuy nhiên nó là có thể hiển thị một widget inline mà người dùng phải rõ ràng báo chí để xác minh bản thân.

Để thêm một widget inline, chỉ định một ID phần tử DOM để container tham số của RecaptchaVerifier dụ. Yếu tố phải tồn tại và được làm rỗng nếu không một lỗi sẽ được ném ra. Nếu không có container tham số được cung cấp, widget sẽ được trả lại như "vô hình".

ConfirmationResult confirmationResult = await auth.signInWithPhoneNumber('+44 7123 123 456', RecaptchaVerifier(
  container: 'recaptcha',
  size: RecaptchaVerifierSize.compact,
  theme: RecaptchaVerifierTheme.dark,
));

Bạn có thể tùy chọn thay đổi kích thước và chủ đề bằng cách tùy biến các sizetheme tranh luận như trên.

Nó cũng có thể lắng nghe các sự kiện, chẳng hạn như liệu các reCAPTCHA đã được hoàn thành bởi người sử dụng, cho dù reCAPTCHA đã hết hạn hoặc một lỗi được ném:

RecaptchaVerifier(
  onSuccess: () => print('reCAPTCHA Completed!'),
  onError: (FirebaseAuthException error) => print(error),
  onExpired: () => print('reCAPTCHA Expired!'),
);

thử nghiệm

Căn cứ hỏa lực cung cấp hỗ trợ cho các thử nghiệm tại địa phương số điện thoại:

  1. Trên Bảng điều khiển căn cứ hỏa lực, chọn "Điện thoại" cung cấp dịch vụ xác thực và click vào "Số điện thoại để thử nghiệm" thả xuống.
  2. Nhập số điện thoại mới (ví dụ như +44 7444 555666 ) và một mã kiểm tra (ví dụ 123456 ).

Nếu được cung cấp một số điện thoại thử nghiệm để một trong hai verifyPhoneNumber hoặc signInWithPhoneNumber phương pháp, không SMS sẽ thực sự được gửi đi. Thay vào đó có thể cung cấp mã kiểm tra trực tiếp đến PhoneAuthProvider hoặc với signInWithPhoneNumber xử lý kết quả xác nhận s.