2016-10-11 13 views
7

Próbuję wysłać e-mail weryfikacyjny po pomyślnej rejestracji użytkownika. Co daje mi błąd An internal error has occurred. [ USER_NOT_FOUND ]. Jest to kod mam w chwili obecnej -Firebase - poczta weryfikacyjna poczty e-mail nie działa - wystąpił błąd wewnętrzny. [USER_NOT_FOUND]

public void signUpUser(View view){ 

    EditText mailEditText = (EditText) findViewById(R.id.editText); 
    EditText pwdEditTet = (EditText) findViewById(R.id.editText2); 


    String email = mailEditText.getText().toString(); 
    String password = pwdEditTet.getText().toString(); 

    Log.d("Info",email); 
    Log.d("Info",password); 

    mAuth.createUserWithEmailAndPassword(email,password).addOnCompleteListener(this, new OnCompleteListener<AuthResult>() { 
     @Override 
     public void onComplete(@NonNull Task<AuthResult> task) { 
      try { 
       AuthResult result = task.getResult(); 

       Log.d("Sign up", "createUserWithEmail:onComplete:" + task.isSuccessful()); 


       // If sign in fails, display a message to the user. If sign in succeeds 
       // the auth state listener will be notified and logic to handle the 
       // signed in user can be handled in the listener. 
       if (!task.isSuccessful()) { 
        Toast.makeText(MainActivity.this, R.string.auth_failed, 
          Toast.LENGTH_SHORT).show(); 
       }else{ 
        Log.d("Sign up", "Sending verification email"); 
        // Sending the verification email 
        //FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser(); 

        mAuth.getCurrentUser().sendEmailVerification() 
          .addOnCompleteListener(new OnCompleteListener<Void>() { 
           @Override 
           public void onComplete(@NonNull Task<Void> task) { 
            if (task.isSuccessful()) { 
             Log.d("Email Sent", "Verification Email sent."); 
            }else{ 
             Log.d("Email Sent",task.getException().getLocalizedMessage()); 
            } 
           } 
          }); 
       } 
      } catch (Exception e){ 
       Toast.makeText(MainActivity.this,R.string.user_exist,Toast.LENGTH_SHORT).show(); 
       Log.e("Exception",e.getLocalizedMessage()); 
      } 
     } 
    }); 
} 

i tutaj jest dziennik, który jest drukowany coraz -

10-11 10:10:50.372 31518-31518/au.com.savedme D/Sign up: Sending verification email 
10-11 10:10:51.438 31518-31518/au.com.savedme D/Email Sent: An internal error has occurred. [ USER_NOT_FOUND ] 
10-11 10:11:00.429 31518-31538/au.com.savedme W/DynamiteModule: Local module descriptor class for com.google.firebase.auth not found. 

Proszę spojrzeć i daj mi znać na wypadek robie nic złego tutaj.

+0

Po utworzeniu użytkownika, zaloguj się tego użytkownika. Użyj mAuth.signInWithEmailAndPassword (e-mail, hasło) przed użyciem mAuth.getCurrentUser(). – Dexter

+0

Dziękuję za odpowiedź, jednak nawet po użyciu 'mAuth.signInWithEmailAndPassword (e-mail, hasło);' to nie działa. –

+0

@Dexter: tworzenie użytkownika automatycznie je podpisuje, więc nie powinno to stanowić problemu. –

Odpowiedz

2

miałem również ten sam problem, a powodem znalazłem za to, jeśli próbuje ten kod z samego użytkownika, które zostały już utworzone, a następnie usunął go z Firebase konsoli, to nie będzie działać.

Spróbuj użyć nowego adresu e-mail, którego jeszcze nie próbowałeś i będzie działać.

Zauważ, że createUserWithEmailAndPassword() nie tylko stwarza użytkownikowi, ale także, jeśli się powiedzie, podpisuje użytkownikowi. Kiedy logowania pojawia się, gdy nie jest istniejącym zalogowanych użytkownik pojawia tworzenie i do być błędem bazy Firebase związanym z wylogowaniem i wyczyszczeniem pamięci podręcznej dla poprzedniego użytkownika.

udało mi się zrobić swoją pracę kodu do wcześniej zalogowanych i później usunięty użytkownik wywołując signOut() przed createUserWithEmailAndPassword().

reference

+2

Tak Ravi to jest poprawna odpowiedź, sam to odkryłem, ale zapomniałem dodać tutaj. Dzięki stary – user6650650

0

Czy na pewno masz włączone uwierzytelnianie E-mail/hasło w konsoli? Jeśli nie, przejdź do https://console.firebase.google.com i kliknij swój projekt, kliknij "Auth", następnie "METODA Wpisów", kliknij ikonę pióra, aby ją włączyć. Mam nadzieję że to pomoże!

+0

Tak Mam już włączone Email/Password –

1

Mam ten sam problem. Odkryłem, że metoda mAuth.getCurrentUser(). SendEmailVerification() nie działa w metodzie mAuth.createUserWithEmailAndPassword (e-mail, hasło). Napisałem kod poza metodą createUserWithEmailAndPassword (e-mail, hasło) i otrzymałem wiadomość e-mail z potwierdzeniem. Dziwne.

FirebaseUser user= FirebaseAuth.getInstance().getCurrentUser(); 
    if(user!=null){ 
     user.sendEmailVerification().addOnCompleteListener(MainActivity.this,new OnCompleteListener<Void>() { 
      @Override 
      public void onComplete(@NonNull Task<Void> task) { 
       if(task.isSuccessful()){ 
        Log.i("Success","Yes"); 

       } 
       else { 
        Log.i("Success","No"+task.getException()); 
       } 
      } 
     }); 
    } 
+0

Dzięki za analizę, jednak nie powinniśmy wysyłać wiadomość weryfikacyjną wewnątrz stworzyć metodę użytkownika. Ponieważ jest tylko dla nowych Czy próbowałeś również wywołać metodę zewnętrzną z metody tworzenia użytkownika? –

+0

Tak, powinna ona zostać wywołana wewnątrz metody tworzenia użytkownika, zastosowałem tę samą logikę, co twoja, nazywane metodą sendEmailVerification() inside create user. błąd jako Twój –

+0

Stworzyłem przycisk wywoływania metody sendEmailVerification(), nadal nie działa.Nie jestem pewien, dlaczego nie działa. –