Cordova-plugin-firebase: Masalah Verifikasi Instan Firebase Phone Auth (Android)

Dibuat pada 3 Jun 2018  ·  4Komentar  ·  Sumber: arnesson/cordova-plugin-firebase

Readme menyatakan saya harus menelepon titik akhir saya untuk mendapatkan token khusus dan masuk. Saya menerapkan sesuai panduan yang diberikan dan dapat masuk sekarang.

Dari pemahaman saya, bukankah ketika Firebase auth mengembalikan saya verifikasi instan benar, saya harus masuk langsung daripada meminta token khusus dari titik akhir saya untuk masuk dengan token khusus?

Apakah metode yang dinyatakan dalam readme solusi solusi sementara atau perbaikan permanen?

authentication help wanted question

Komentar yang paling membantu

@YaMo97 : Solusi Anda benar 👍. Saya akan mencoba untuk menerapkannya.
Saya pikir itu ide yang buruk untuk memanggil server backend dengan nomor telepon untuk mendapatkan token. Ini adalah pelanggaran keamanan besar . Siapa pun dapat mengakses URL ini, memberikan nomor telepon apa pun sebagai parameter, dan mendapatkan token untuk mengakses aplikasi.

Semua 4 komentar

Saya menghadapi dilema yang sama, dan saat menelusuri Firebase Docs, saya menemukan beberapa poin dapat digunakan untuk mencapai perbaikan permanen.

Tautan ke Firebase Docs: - Otentikasi dengan Firebase di Android menggunakan Nomor Telepon

Mengutip dokumen: -

padaVerifikasiSelesai(PhoneAuthCredential)

Metode ini dipanggil dalam dua situasi:

  • Verifikasi instan: dalam beberapa kasus, nomor telepon dapat langsung diverifikasi tanpa perlu mengirim atau memasukkan kode verifikasi.
  • Pengambilan otomatis: pada beberapa perangkat, layanan Google Play dapat secara otomatis mendeteksi verifikasi yang masuk

SMS dan lakukan verifikasi tanpa tindakan pengguna. (Kemampuan ini mungkin tidak tersedia dengan beberapa operator.)
Dalam kedua kasus tersebut, _nomor telepon pengguna telah berhasil diverifikasi, dan Anda dapat menggunakan objek PhoneAuthCredential yang diteruskan ke panggilan balik untuk membuat pengguna masuk._

onCodeSent(String verificationId, PhoneAuthProvider.ForceResendingToken)

Pilihan. Metode ini dipanggil setelah kode verifikasi dikirim melalui SMS ke nomor telepon yang diberikan.

Saat metode ini dipanggil, sebagian besar aplikasi menampilkan UI yang meminta pengguna mengetikkan kode verifikasi dari pesan SMS. (Pada saat yang sama, verifikasi otomatis mungkin berjalan di latar belakang.) _ Kemudian, setelah pengguna mengetik kode verifikasi, Anda dapat menggunakan kode verifikasi dan ID verifikasi yang diteruskan ke metode untuk membuat objek PhoneAuthCredential, yang pada gilirannya dapat Anda gunakan untuk masuk ke pengguna _. Namun, beberapa aplikasi mungkin menunggu hingga onCodeAutoRetrievalTimeOut dipanggil sebelum menampilkan UI kode verifikasi (tidak disarankan).

Jika Anda fokus pada teks yang dicetak miring, PhoneAuthCredential dapat digunakan untuk membuat pengguna masuk.

Dalam kasus onCodeSent() , kita membuat sendiri PhoneAuthCredential dan kemudian masuk menggunakan kode berikut:

signInWithOTP(verificationId: string, otpCode: string): Promise<firebase.User> {
        return firebase.auth().signInWithCredential(
            firebase.auth.PhoneAuthProvider.credential(verificationId, otpCode)
        );
}

Tetapi dalam kasus onVerificationCompleted() , PhoneAuthCredential diteruskan ke panggilan balik...

Implementasi ini di Plugin adalah sebagai berikut di mana PhoneAuthCredential dilewatkan ke panggilan balik: -
https://github.com/arnesson/cordova-plugin-firebase/blob/c53bd4aa04e83e37009ecfb1fd4342ac2cc78618/src/android/FirebasePlugin.java#L937 -L962

Jadi, jika kita dapat mengekspos PhoneAuthCredentia l ini di luar plugin, dikembalikan bersama pluginResult atau mungkin mengimplementasikan fungsi signIn() di dalam plugin seperti dikutip dari firebase docs: -

Masuk pengguna

Setelah Anda mendapatkan objek PhoneAuthCredential, baik dalam callback onVerificationCompleted atau dengan memanggil PhoneAuthProvider.getCredential, selesaikan alur masuk dengan meneruskan objek PhoneAuthCredential ke FirebaseAuth.signInWithCredential:

private void signInWithPhoneAuthCredential(PhoneAuthCredential credential) {
    mAuth.signInWithCredential(credential)
            .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
                <strong i="24">@Override</strong>
                public void onComplete(<strong i="25">@NonNull</strong> Task<AuthResult> task) {
                    if (task.isSuccessful()) {
                        // Sign in success, update UI with the signed-in user's information
                        Log.d(TAG, "signInWithCredential:success");

                        FirebaseUser user = task.getResult().getUser();
                        // ...
                    } else {
                        // Sign in failed, display a message and update the UI
                        Log.w(TAG, "signInWithCredential:failure", task.getException());
                        if (task.getException() instanceof FirebaseAuthInvalidCredentialsException) {
                            // The verification code entered was invalid
                        }
                    }
                }
            });
}

Dengan menambahkan returnResults.put("credential", credential); ke baris ini, kita dapat mengembalikan PhoneAuthCredential untuk digunakan lebih lanjut, seperti yang dilakukan di onCodeSent() : -
https://github.com/arnesson/cordova-plugin-firebase/blob/c53bd4aa04e83e37009ecfb1fd4342ac2cc78618/src/android/FirebasePlugin.java#L948 -L951

Mungkin Verifikasi Instan juga bisa ditangani menggunakan plugin dengan cara ini.

Saya bukan ahli dalam hal ini dan saya hanya membuat beberapa pengurangan dari informasi yang tersedia. Agak brainstorming, tetapi jika seseorang bisa mengambilnya dari sini, itu akan sangat bagus.

@YaMo97 : Solusi Anda benar 👍. Saya akan mencoba untuk menerapkannya.
Saya pikir itu ide yang buruk untuk memanggil server backend dengan nomor telepon untuk mendapatkan token. Ini adalah pelanggaran keamanan besar . Siapa pun dapat mengakses URL ini, memberikan nomor telepon apa pun sebagai parameter, dan mendapatkan token untuk mengakses aplikasi.

Anda benar @ placha433 - Saya tidak pernah memikirkan peretasan ini ketika saya mencoba memperbaiki masalah ini. Jadi ini ada pada saya dan readme harus diubah. Kami berhenti menggunakan firebase di proyek ini, karena tidak melakukan pekerjaan dengan benar seperti yang kami inginkan.

Senang melihat kalian mendorong perbaikan untuk ini

Apakah halaman ini membantu?
0 / 5 - 0 peringkat