Проверка подлинности телефона - PullRequest
0 голосов
/ 19 октября 2019

Я работаю с PhoneAuthCredential, который работает нормально, но мне нужно проверить, предоставили ли пользователь некоторые данные, такие как имя пользователя и адрес электронной почты, прежде чем перенаправить его на домашнюю активность, и если я не нашел эти данные, я должен перенаправить его на регистрациюактивность, чтобы я мог получить эти данные, прежде чем войти в него

public class VerifyPhoneActivity extends AppCompatActivity {

    private String verificationId;
    private FirebaseAuth mAuth;
    FirebaseAuth.AuthStateListener mAuthListener;

    DatabaseReference users;


    ProgressBar progressBar;
    TextInputEditText editText;
    AppCompatButton buttonSignIn;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_verify_phone);

        mAuth = FirebaseAuth.getInstance();

        progressBar = findViewById(R.id.progressbar);
        editText = findViewById(R.id.editTextCode);
        buttonSignIn = findViewById(R.id.buttonSignIn);

        String phoneNumber = getIntent().getStringExtra("phoneNumber");
        sendVerificationCode(phoneNumber);

        // save phone number
        SharedPreferences prefs = getApplicationContext().getSharedPreferences("USER_PREF",
                Context.MODE_PRIVATE);
        SharedPreferences.Editor editor = prefs.edit();
        editor.putString("phoneNumber", phoneNumber);
        editor.apply();

        buttonSignIn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                String code = editText.getText().toString().trim();

                if (code.isEmpty() || code.length() < 6) {

                    editText.setError("Enter code...");
                    editText.requestFocus();
                    return;
                }
                verifyCode(code);
            }
        });

    }

    private void verifyCode(String code) {
        PhoneAuthCredential credential = PhoneAuthProvider.getCredential(verificationId, code);
        signInWithCredential(credential);
    }

    private void signInWithCredential(PhoneAuthCredential credential) {
        mAuth.signInWithCredential(credential)
                .addOnCompleteListener(new OnCompleteListener<AuthResult>() {
                    @Override
                    public void onComplete(@NonNull Task<AuthResult> task) {
                        if (task.isSuccessful()) {

                            FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
                            if(user!=null){
                                Intent intent = new Intent(VerifyPhoneActivity.this, DriverHome.class);
                                startActivity(intent);
                                finish();
                            }else {
                                Intent intent = new Intent(VerifyPhoneActivity.this, StartActivity.class);
                                startActivity(intent);
                                finish();
                            }

                        }else {
                            Toast.makeText(VerifyPhoneActivity.this, task.getException().getMessage(), Toast.LENGTH_LONG).show();
                            progressBar.setVisibility(View.GONE);
                        }
                    }
                });
    }

    private void sendVerificationCode(String number) {
        progressBar.setVisibility(View.VISIBLE);
        PhoneAuthProvider.getInstance().verifyPhoneNumber(
                number,
                60,
                TimeUnit.SECONDS,
                TaskExecutors.MAIN_THREAD,
                mCallBack
        );

        progressBar.setVisibility(View.GONE);
    }

    private PhoneAuthProvider.OnVerificationStateChangedCallbacks
            mCallBack = new PhoneAuthProvider.OnVerificationStateChangedCallbacks() {

        @Override
        public void onCodeSent(String s, PhoneAuthProvider.ForceResendingToken forceResendingToken) {
            super.onCodeSent(s, forceResendingToken);
            verificationId = s;
        }

        @Override
        public void onVerificationCompleted(PhoneAuthCredential phoneAuthCredential) {
            String code = phoneAuthCredential.getSmsCode();
            if (code != null) {
                editText.setText(code);
                verifyCode(code);
            }
        }

        @Override
        public void onVerificationFailed(FirebaseException e) {
            Toast.makeText(VerifyPhoneActivity.this, e.getMessage(), Toast.LENGTH_LONG).show();
            progressBar.setVisibility(View.GONE);
        }
    };

}

1 Ответ

0 голосов
/ 19 октября 2019

Вопрос не очень понятен. От какого действия вы надеетесь получить эту информацию?

Создайте действие, чтобы получить информацию о пользователе. Пример: - UserInformationActivity

В java-файле вы можете создать узел базы данных firebase для хранения этой информации

Ссылка на базу данных:

DatabaseReference userinfo=FirebaseDatabase.getInstance().getReference().child("User Info").child(FirebaseAuth.getInstance().getCureentUser().getUid());

Использовать Hashmapчтобы вставить данные в узел.

Hashmap hash = new Hashmap();
hash.put("Username", username);
hash.put("Email", email);
userinfo.updateChildren(hash);

А в вашем классе VerifyPhoneActivity, когда вы успешно аутентифицировали пользователя, проверьте, существует ли снимок данных этой ссылки в базе данных firebase. Обновите свой код в классе VerifyPhoneActivity следующим образом:

final DatabaseReference us=FirebaseDatabase.getInstance().getReference().child("User Info").child(FirebaseAuth.getInstance().getCurrentUser.getUid())

И обновите свой метод signInwithCredential () следующим образом:

FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
if(user!=null){
    us.addValueEventlistner(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            if(dataSnapshot.exists()){
                Intent intent = new Intent(VerifyPhoneActivity.this, DriverHome.class);
                startActivity(intent);
                finish(); }
            else{
                Intent gotoUserInfo=new Intent(VerifyPhoneActivity.this,UserInformationActivity.class);
                startActivity(gotoUserInfo);
                finish();
            } }
        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {
        }
    });
}
else {
    Intent intent = new Intent(VerifyPhoneActivity.this, StartActivity.class);
    startActivity(intent);
    finish();
}

Надеюсь, это поможет. Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...