공유 환경 설정을 사용하여 Firebase 인증에 로그인 등록

슈밤 셰지

Firebase를 사용하여 로그인/등록 인증을 생성하고 DashboardActivity에서 전체 이름 및 이메일 주소와 같은 공유 기본 설정을 사용하여 데이터를 입력합니다. 하지만 문제는 User1이 새 계정을 만들고 로그인하면 데이터가 성공적으로 채워지고... 그리고 user2가 다른 새 계정을 만들고 다시 로그인하면 데이터가 성공적으로 채워졌을 때입니다... 그러나 문제는 다시 User1 로그인하고 대시보드 활동으로 이동한 다음 user2 세부 정보를 표시한다는 것입니다.

이것이 나의 문제다

이것은 내 코드입니다

활동_메인.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity">

    <Button
        android:id="@+id/register"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Register"/>
    <Button
        android:id="@+id/login"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Login"/>

</LinearLayout>

메인 액티비티.자바

package com.example.firebaseemailpasswordexample;

import android.content.Intent;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class MainActivity extends AppCompatActivity {

    Button registerBtn, loginBtn;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        initializeViews();

        registerBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(MainActivity.this, RegistrationActivity.class);
                startActivity(intent);
            }
        });
        loginBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(MainActivity.this, LoginActivity.class);
                startActivity(intent);
            }
        });
    }

    private void initializeViews() {
        registerBtn = findViewById(R.id.register);
        loginBtn = findViewById(R.id.login);
    }
}

활동_등록.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center_vertical"
    android:orientation="vertical"
    android:padding="16dp"
    tools:context=".RegistrationActivity">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Register new account" />

    <EditText
        android:id="@+id/fname"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="Full name" />

    <EditText
        android:id="@+id/email"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="Email" />

    <EditText
        android:id="@+id/password"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="Password"
        android:inputType="textPassword" />

    <EditText
        android:id="@+id/mob"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="Mobile Number" />

    <Button
        android:id="@+id/register"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Register" />

    <ProgressBar
        android:id="@+id/progressBar"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:visibility="gone" />

</LinearLayout>

등록 활동.자바

package com.example.firebaseemailpasswordexample;
import android.content.Intent;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;

import android.content.SharedPreferences;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ProgressBar;
import android.widget.Toast;
import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.auth.AuthResult;
import com.google.firebase.auth.FirebaseAuth;

public class RegistrationActivity extends AppCompatActivity {

    private EditText emailTV, passwordTV,fname1,mobnumber;
    private Button regBtn;
    private ProgressBar progressBar;

    private FirebaseAuth mAuth;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_registration);

        mAuth = FirebaseAuth.getInstance();

        initializeUI();

        regBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                registerNewUser();
            }
        });
    }

    private void registerNewUser() {
        progressBar.setVisibility(View.VISIBLE);

        String email, password,firstname,mobnumber1;
        email = emailTV.getText().toString();
        password = passwordTV.getText().toString();
        firstname=fname1.getText().toString();
        mobnumber1=mobnumber.getText().toString();

        SharedPreferences sharedPref = getSharedPreferences("myKey", MODE_PRIVATE);
        SharedPreferences.Editor editor = sharedPref.edit();
        editor.putString("email", email);
        editor.putString("firstname", firstname);
        editor.apply();

        if (TextUtils.isEmpty(email)) {
            Toast.makeText(getApplicationContext(), "Please enter email...", Toast.LENGTH_LONG).show();
            return;
        }
        if (TextUtils.isEmpty(password)) {
            Toast.makeText(getApplicationContext(), "Please enter password!", Toast.LENGTH_LONG).show();
            return;
        }

        mAuth.createUserWithEmailAndPassword(email, password)
                .addOnCompleteListener(new OnCompleteListener<AuthResult>() {
                    @Override
                    public void onComplete(@NonNull Task<AuthResult> task) {
                        if (task.isSuccessful()) {
                            Toast.makeText(getApplicationContext(), "Registration successful!", Toast.LENGTH_LONG).show();
                            progressBar.setVisibility(View.GONE);

                            Intent intent = new Intent(RegistrationActivity.this, LoginActivity.class);
                            startActivity(intent);
                        }
                        else {
                            Toast.makeText(getApplicationContext(), "Registration failed! Please try again later", Toast.LENGTH_LONG).show();
                            progressBar.setVisibility(View.GONE);
                        }
                    }
                });
    }

    private void initializeUI() {
        emailTV = findViewById(R.id.email);
        passwordTV = findViewById(R.id.password);
        fname1=findViewById(R.id.fname);
        mobnumber=findViewById(R.id.mob);
        regBtn = findViewById(R.id.register);
        progressBar = findViewById(R.id.progressBar);
    }
}

활동_로그인.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center_vertical"
    android:orientation="vertical"
    android:padding="16dp"
    tools:context=".LoginActivity">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Account login"/>
    <EditText
        android:id="@+id/email"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="Email" />

    <EditText
        android:id="@+id/password"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="Password"
        android:inputType="textPassword" />

    <Button
        android:id="@+id/login"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Login" />

    <ProgressBar
        android:id="@+id/progressBar"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:visibility="gone" />
</LinearLayout>

로그인 활동.자바

package com.example.firebaseemailpasswordexample;
import android.content.Intent;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ProgressBar;
import android.widget.Toast;

import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.auth.AuthResult;
import com.google.firebase.auth.FirebaseAuth;

public class LoginActivity extends AppCompatActivity {

    private EditText emailTV, passwordTV;
    private Button loginBtn;
    private ProgressBar progressBar;

    private FirebaseAuth mAuth;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);

        mAuth = FirebaseAuth.getInstance();

        initializeUI();

        loginBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                loginUserAccount();
            }
        });
    }

    private void loginUserAccount() {
        progressBar.setVisibility(View.VISIBLE);

        String email, password;
        email = emailTV.getText().toString();
        password = passwordTV.getText().toString();

        if (TextUtils.isEmpty(email)) {
            Toast.makeText(getApplicationContext(), "Please enter email...", Toast.LENGTH_LONG).show();
            return;
        }
        if (TextUtils.isEmpty(password)) {
            Toast.makeText(getApplicationContext(), "Please enter password!", Toast.LENGTH_LONG).show();
            return;
        }

        mAuth.signInWithEmailAndPassword(email, password)
                .addOnCompleteListener(new OnCompleteListener<AuthResult>() {
                    @Override
                    public void onComplete(@NonNull Task<AuthResult> task) {
                        if (task.isSuccessful()) {
                            Toast.makeText(getApplicationContext(), "Login successful!", Toast.LENGTH_LONG).show();
                            progressBar.setVisibility(View.GONE);

                            Intent intent = new Intent(LoginActivity.this, DashboardActivity.class);
                            startActivity(intent);
                        }
                        else {
                            Toast.makeText(getApplicationContext(), "Login failed! Please try again later", Toast.LENGTH_LONG).show();
                            progressBar.setVisibility(View.GONE);
                        }
                    }
                });
    }

    private void initializeUI() {
        emailTV = findViewById(R.id.email);
        passwordTV = findViewById(R.id.password);

        loginBtn = findViewById(R.id.login);
        progressBar = findViewById(R.id.progressBar);
    }
}

활동_대시보드.xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".DashboardActivity">


    <TextView
        android:id="@+id/textView4"
        android:layout_width="370dp"
        android:layout_height="71dp"
        android:layout_marginBottom="43dp"
        android:text="TextView"
        app:layout_constraintBottom_toTopOf="@+id/textView5"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.5"
        app:layout_constraintStart_toStartOf="parent"
        tools:ignore="MissingConstraints" />

    <TextView
        android:id="@+id/textView5"
        android:layout_width="371dp"
        android:layout_height="80dp"
        android:layout_marginBottom="158dp"
        android:text="TextView"
        app:layout_constraintBottom_toTopOf="@+id/button"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.5"
        app:layout_constraintStart_toStartOf="parent"
        tools:ignore="MissingConstraints" />

    <TextView
        android:id="@+id/textView2"
        android:layout_width="369dp"
        android:layout_height="70dp"
        android:layout_marginTop="65dp"
        android:layout_marginBottom="49dp"
        android:text="TextView"
        app:layout_constraintBottom_toTopOf="@+id/textView4"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.5"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        tools:ignore="MissingConstraints" />

    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginBottom="147dp"
        android:text="Button"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.5"
        app:layout_constraintStart_toStartOf="parent" />

</androidx.constraintlayout.widget.ConstraintLayout>

대시보드 활동.자바

package com.example.firebaseemailpasswordexample;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseUser;

public class DashboardActivity extends AppCompatActivity {
    public static final String  Tag="DashboardActivity";



    private TextView textView41,textView51,textView21;
    private Button button1;
    private FirebaseAuth.AuthStateListener authListener;


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

        textView41=findViewById(R.id.textView4);
        textView51=findViewById(R.id.textView5);
        textView21=findViewById(R.id.textView2);
        button1=findViewById(R.id.button);

        SharedPreferences sharedPref = getSharedPreferences("myKey", MODE_PRIVATE);



        String email = sharedPref.getString("email","");
        String firstname = sharedPref.getString("firstname","");


        textView41.setText(email);
        textView51.setText(firstname);


        button1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Log.d(Tag,"onClick: attempting to sign out user.");
                FirebaseAuth.getInstance().signOut();
            }
        });


    }


    public void setupFirebaseListener(){
        Log.d(Tag,"setupFirebaseListener: Settingup the auth state listener");
        authListener=new FirebaseAuth.AuthStateListener() {
            @Override
            public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
                FirebaseUser user=firebaseAuth.getCurrentUser();
                if (user!=null){
                    Log.d(Tag,"onAuthStateChanged: Signin" +user.getUid());
                }else {
                    Log.d(Tag,"onAuthStateChanged: Sign out");
                    Intent intent=new Intent(DashboardActivity.this,LoginActivity.class);
                    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
                    startActivity(intent);
                }
            }
        };
    }
}
아사두자만

여러 사용자가 동일한 앱에 로그인하도록 지원하는 사용 사례에 따르면 사용자 정보를 저장하지 않아야 하는 SharedPreferences대신 Firebase를 사용할 수 있습니다.

1단계: 등록 성공 후 updateProfile사용자 정보 업데이트 사용

mAuth.createUserWithEmailAndPassword(email, password)
        .addOnCompleteListener(new OnCompleteListener<AuthResult>() {
            @Override
            public void onComplete(@NonNull Task<AuthResult> task) {
                if(task.isSuccessful()) {

                    FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();

                    UserProfileChangeRequest profileUpdates = new UserProfileChangeRequest.Builder()
                            .setDisplayName(firstname)
                            .build();

                    user.updateProfile(profileUpdates)
                            .addOnCompleteListener(new OnCompleteListener<Void>() {
                                @Override
                                public void onComplete(@NonNull Task<Void> task) {
                                    if (task.isSuccessful()) {
                                        Log.d(TAG, "User profile updated.");
                                    }
                                }
                            });

                }
            }
        });

2단계: 로그인 성공 후 FirebaseUser사용자 정보 검색을 위해 사용DashboardActivity

FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();

if (user != null) {
    // Name, email address
    String name = user.getDisplayName();
    String email = user.getEmail();

    textView41.setText(email);
    textView51.setText(name);
}

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

Google 용 Firebase 인증을 사용하여 익명 사용자를 등록 된 사용자로 전환

Android Studio에서 공유 환경 설정을 사용하여 Google 로그인 세부 정보 저장

공유 환경 설정으로 로그인 및 등록. 안드로이드 모바일

공유 환경 설정을 사용하여 사용자가 Flutter에 로그인 상태를 유지하는 방법은 무엇입니까?

공유 환경 설정을 사용하여 Android 스튜디오에서 프로그래밍 방식으로 LinearLayout을 닫을 수 있도록 만듭니다.

내 React 앱에서 Firebase 인증에 등록을 필수로 설정하는 방법은 무엇입니까?

Django에서 CustomForm을 사용하여 등록한 경우 Oauth를 사용하여 로그인하는 방법

공유 환경 설정을 사용하여 Android에서 일회성 등록 화면을 구현하고 싶지만 이전 공유 환경 설정을 가져올 수 없습니다.

공유 환경 설정을 사용하여 활동에서 프래그밋으로

공유 환경 설정을 사용하여 onCreate에서 textView를 검색 할 때 널 포인터 예외

Firebase 인증 확인을 사용하여 라우터 보호 경로에 반응

Android는 로그인 목적으로 공유 환경 설정을 사용할 수 있습니다

공유 환경 설정을 사용하여 처음 실행시 확인하는 Android

FireBase 인증 로그인 / 등록 예외

소셜 인증을 사용할 때 새로 등록 된 사용자와 Firebase에 등록 된 사용자를 구별하는 방법은 무엇입니까?

사용자 등록 및 Firebase 오류 'Reference.push 실패 : 두 번째 인수는 유효한 함수 여야 함'을 사용한 로그인

사용자가 로그인한 경우에도 firebase.auth().currentUser가 NULL을 반환하는 이유

Flutter에서 공유 환경 설정을 사용하여 데이터를 객체로 저장

공유 환경 설정을 사용하여 Android 노트북 프로젝트에 메모 카운터 추가

'ROLE_USER'가있는 사용자가 경로에 액세스 할 수 없도록 access_control을 설정하는 방법 : ^ / 로그인 성공 후 로그인?

로그인 Android의 공유 환경 설정에 사용자 정보 가져 오기

Firebase 인증-사용자가 한 계정에 동시에 로그인하지 못하도록합니다.

Firebase 인증. 여러 사용자가 하나의 기본 회사 계정에 로그인 할 수 있도록 디자인하는 방법.?

Powershell을 사용하여 UNC 경로에 대한 "공유 권한"설정

로그인을 유지하려면 공유 기본 설정을 사용하여 Android 스튜디오에서

환경 변수를 사용하여 Firebase Admin SDK로 인증

목록을 사용하여 유 방향 그래프의 모든 경로 인쇄

Flutter: 공유 기본 설정 플러그인을 사용하여 저장된 즐겨찾기 목록 저장

Kotlin에서 공유 환경 설정을 사용하여 값 검색

TOP 리스트

  1. 1

    ImageJ-히스토그램 빈을 변경할 때 최대, 최소 값이 변경되는 이유는 무엇입니까?

  2. 2

    상황에 맞는 메뉴 색상

  3. 3

    Excel : 합계가 N보다 크거나 같은 상위 값 찾기

  4. 4

    Oracle VirtualBox-설치를 위해 게스트를 부팅 할 때 호스트 시스템이 충돌 함

  5. 5

    ExecuteNonQuery- 연결 속성이 초기화되지 않았습니다.

  6. 6

    Cassandra에서 버전이 지정된 계층의 효율적인 모델링

  7. 7

    원-사각형 충돌의 충돌 측면을 찾는 문제

  8. 8

    Matlab의 반복 Sortino 비율

  9. 9

    Apache POI를 사용하여 xlsx를 읽는 동안 주 스레드의 NoSuchMethodError

  10. 10

    Android에서 Drawable을 int로 또는 그 반대로 변환하는 방법

  11. 11

    어떻게 같은 CustomInfoWindow 다른 이벤트를 할 수 있습니다

  12. 12

    openCV python을 사용하여 텍스트 문서에서 워터 마크를 제거하는 방법은 무엇입니까?

  13. 13

    JQuery datepicker 기능이 인식되지 않거나 새 프로젝트에서 작동하지 않음

  14. 14

    PyCharm에서 프로젝트를 제거하는 방법은 무엇입니까?

  15. 15

    regedit에서 방금 내 보낸 Windows 레지스트리 가져 오기 문제

  16. 16

    C ++ VSCode에서 같은 줄에 중괄호 서식 지정

  17. 17

    Python 사전을 사용하는 동안 "ValueError : could not convert string to float :"발생

  18. 18

    자바 스크립트로 duolingo 형 문장 연습을 개발 중입니다. 구현했지만 더 개선이 필요합니다

  19. 19

    react-redux 저장소의 상태 변수는 console.log 후에 정의되지 않습니까?

  20. 20

    cURL 명령은 git bash에서는 작동하지만 cmd 및 powershell에서는 작동하지 않습니다.

  21. 21

    JavaFX : TilePane을 중앙에 배치하고 TilePane 자식을 왼쪽에서 오른쪽으로 배치하는 방법은 무엇입니까?

뜨겁다태그

보관