在使用Java时,我试图找出一种简洁而简单的方法,通过调用uid获得createUser()。这在使用Javascript (例如这个问题/答案)时很容易做到。我还在Firebase iOS API的上下文中看到了在Stackoverflow上提出的问题,这显然并不容易。我的问题是如何使用Firebase来实现它。具体来说,我的用例与iOS相关问题中的用例相同,即允许管理用户创建用户帐户(电子邮件/密码身份验证),并以uid作为密钥在Firebase中存储有关创建用户的其他信息。了解并使用uid作为密钥是至关重要的,因为它是安全规则的基础。
我已经看到了一些提出的解决方案,这两种解决方案都涉及到在创建新用户帐户之后执行的一些过程。这些是
无论哪种方式,我都有一个复杂的解决方案,其中包含多个异步回调,以处理在使用Javascript时非常琐碎的问题。
因此,我有三个具体问题:
createUser() API与Javascript版本相同?更新:深入挖掘并做一些实验,我找到了问题的答案。事实证明,Firebase提供的API文档已经过时和/或不一致。
Re Q1:根据用于createUser()的Javadoc,唯一可用的回调处理程序是Firebase.ResultHandler。但是,根据Changelog、API参考文件和创建用户帐户上的文档,也可以使用Firebase.ValueResultHandler。这提供了对UID的直接访问。
Re Q2:答案是肯定的。对新创建的用户帐户进行身份验证将导致替换auth令牌。
Re Q3:真正的问题应该是“Firebase的人什么时候更新Javadoc?”或者一个更好的问题是“为什么在没有更新和准确文档的情况下发布新版本的SDK?”
发布于 2015-03-07 15:08:07
下面的代码是处理创建新用户的正确方法
Firebase ref = new Firebase("https://<YOUR-FIREBASE>.firebaseio.com");
ref.createUser("harry@foo.com", "badPassword", new Firebase.ValueResultHandler<Map<String, Object>>() {
public void onSuccess(Map<String, Object> result) {
System.out.println("New account with uid: " + result.get("uid"));
}
public void onError(FirebaseError firebaseError) {
// there was an error
}
});我更新了问题来解释原因。
发布于 2016-07-01 07:25:19
尝尝这个。这是最新的Google /O版的Firebase更新版,我不是在推广这个新版本,也不是把旧版本放下。我只是作为上述解决方案的另一种选择来说明这一点:
mAuth = FirebaseAuth.getInstance();
//creates the user with email and password...make this another type of login if you want
mAuth.createUserWithEmailAndPassword(mEmail, mPassword).addOnCompleteListener(signup.this, new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if (task.isSuccessful()) {
//do something
}
}
});现在您可以添加一个AuthStateListener。您必须将代码放入onCreate、onStart和onStop方法中。请注意,上述代码可以采用任何合理的方法(例如,onCreate、onStart、onResume等)。我们开始:
FirebaseAuth mAuth;
FirebaseAuth.AuthStateListener mAuthListener;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_something);
mAuth = FirebaseAuth.getInstance();
mAuthListener = new FirebaseAuth.AuthStateListener() {
@Override
public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
FirebaseUser user = firebaseAuth.getCurrentUser();
if(user != null){
//check for null to prevent NullPointerException when dealing with user
if(!user.getUid().matches("")){
//make this check just in case...I've experienced unexplainable glitches here
String uid = user.getUid();
//do more stuff with Uid
}
}
}
}
}
@Override
public void onStart(){
super.onStart();
mAuth.addAuthStateListener(mAuthListener);
}
@Override
public void onStop(){
super.onStop();
if(mListener != null){
mAuth.removeAuthStateListener(mAuthListener);
}
}最后,一旦创建了用户(同时注册了用户),mAuthListener就会进行回调(它执行mAuthListener中的任何内容,在本例中,这是获取用户的UID并使用它进行其他操作)。如果您需要在Android中使用这个新的Firebase,这里有一个帮助您的链接:https://firebase.google.com/docs/android/setup
https://stackoverflow.com/questions/28901398
复制相似问题