0

我需要创建和使用的所有细节为登录到应用程序如何在Android中使用Firebase存储用户数据?

我有才能且使用与检索用户个人资料信息存储用户数据的麻烦每个用户数据库条目(UID,名称等) Android中的Firebase。我在Firebase的旧版本中发现了这个documentation,但这似乎不再适用。

有谁知道如何重现上面的代码,以便它可以与新版本的Firebase一起使用?提前谢谢了。

编辑 - 下面的代码:

final Firebase ref = new Firebase("https://<YOUR-FIREBASE-APP>.firebaseio.com"); 
ref.authWithPassword("[email protected]", "correcthorsebatterystaple", 
new Firebase.AuthResultHandler() { 
@Override 
public void onAuthenticated(AuthData authData) { 
    // Authentication just completed successfully :) 
    Map<String, String> map = new HashMap<String, String>(); 
    map.put("provider", authData.getProvider()); 
    if(authData.getProviderData().containsKey("displayName")) { 
     map.put("displayName", authData.getProviderData().get("displayName").toString()); 
    } 
    ref.child("users").child(authData.getUid()).setValue(map); 
} 
@Override 
public void onAuthenticationError(FirebaseError error) { 
    // Something went wrong :(
} 
}); 

回答

1
  • 要验证的电子邮件和密码的用户(谷歌,Facebook)使用Firebase Auth
  • 要使用火力地堡数据库来存储不同的数据比使用Firebase Realtime Database
  • 如果你想从后台管理身份验证用户

用户管理 - 回复用户的完整数据并更改用户的密码或电子邮件地址 自定义身份验证 - 您可以将外部用户系统与Firebase集成。 身份验证 - 使用该服务在您自己的服务器上标识这些用户。

Firebase身份验证有一个NODE JS sdk您可以使用。如果您想从Android访问此功能,则必须创建网络服务(例如,RESTful API)并通过网络与其通信。

  • 如果你想利用注册Auth用户在实时数据库我不认为你可以,因为它们是相互分离。您可以在实时数据库中注册用户,但我不认为您为什么要这样做,因为Auth以更简单的方式为您提供此功能。
  • 火力地堡实时数据库还具有Admin SDK (Java and Node JS)

    请asksing前检查文档。

+1

感谢Klevi01,我有两个身份验证和实时数据库已经工作,我需要的是访问谁是在应用程序验证用户的方式,我可以在Firebase仪表板的“身份验证”标签下看到用户列表,但无法通过实时数据库访问它们。我链接的上述文档显示了如何使用旧版Firebase实现此目标,但我无法使用最新版本的工作。 –

2

对于火力数据库(新版本),你需要做的变化followning创建用户..

 private FirebaseAuth mAuth; 
     String mUserEmail = "[email protected]"; 
     String mPassword = "correcthorsebatterystaple" 

     mAuth.createUserWithEmailAndPassword(mUserEmail, mPassword) 
    .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() { 
       @Override 
       public void onComplete(@NonNull Task<AuthResult> task) { 

        Log.d(LOG_TAG, getString(R.string.log_message_auth_successful) + " createUserWithEmail:onComplete:" + task.isSuccessful()); 

        // if task is not successful show error 
        if (!task.isSuccessful()) { 

         try { 
          throw task.getException(); 
         } catch (FirebaseAuthUserCollisionException e) { 
          // log error here        

         } catch (FirebaseNetworkException e) { 
          // log error here 
         } catch (Exception e) { 
         // log error here   
         } 

         } else { 

        // successfully user account created 
       // now the AuthStateListener runs the onAuthStateChanged callback 

        } 
       } 

      }); 
     } 

现在加入下述方法的onCreate()。

final DatabaseReference ref = FirebaseDatabase.getInstance(). 
    getReferenceFromUrl(https://<YOUR-FIREBASE-APP>.firebaseio.com"); 
    mAuth = FirebaseAuth.getInstance(); 
    mAuthListener = new FirebaseAuth.AuthStateListener() { 
     @Override 
     public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) { 
      FirebaseUser user = firebaseAuth.getCurrentUser(); 

      if (user != null) { 
       // User is signed in 
      Map<String, String> map = new HashMap<String, String>(); 
      map.put("provider", user.getProvider()); 
      if(user.getProviderData().containsKey("displayName")) { 
      map.put("displayName", 
      user.getProviderData().get("displayName").toString()); 
      } 
      ref.child("users").child(user.getUid()).setValue(map); 
      } else { 
       // User is signed out 
       Log.d(LOG_TAG, "onAuthStateChanged:signed_out"); 
      } 
     } 
    }; 

    @Override 
public void onStart() { 
    super.onStart(); 
    mAuth.addAuthStateListener(mAuthListener); 
} 

@Override 
public void onStop() { 
    super.onStop(); 
    if (mAuthListener != null) { 
     mAuth.removeAuthStateListener(mAuthListener); 
    } 

} 
+0

如果您想使用电子邮件和密码登录用户,则可以使用mAuth.signInWithEmailAndPassword(电子邮件,密码)方法。 –

+0

标记此答案为接受,如果它可以帮助你。 –

0

请使用最新版本的Firebase SDK:firebase.google.com/docs。使用旧版SDK(就像你现在所做的那样)只会导致比需要更困难的时间。

可以获取用户信息如下:

FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser(); 
if (user != null) { 
    for (UserInfo profile : user.getProviderData()) { 
     // Id of the provider (ex: google.com) 
     String providerId = profile.getProviderId(); 

     // UID specific to the provider 
     String uid = profile.getUid(); 

     // Name, email address, and profile photo Url 
     String name = profile.getDisplayName(); 
     String email = profile.getEmail(); 
     Uri photoUrl = profile.getPhotoUrl(); 
    }; 
} 
相关问题