我需要为登录到应用程序的每个用户创建和使用包含所有详细信息(uid,名称等)的数据库条目
我无法存储用户数据,以便在Android中使用Firebase来使用和检索用户个人资料信息。我在旧版本的Firebase上找到了此documentation,但这似乎不再适用。
有没有人知道如何重现上述代码,以便它适用于新版本的Firebase?非常感谢提前。
编辑 - 以下代码:
final Firebase ref = new Firebase("https://<YOUR-FIREBASE-APP>.firebaseio.com");
ref.authWithPassword("jenny@example.com", "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 :(
}
});
答案 0 :(得分:2)
要在firebase数据库(新版本)中创建用户,您需要进行以下更改..
private FirebaseAuth mAuth;
String mUserEmail = "jenny@example.com";
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);
}
}
答案 1 :(得分:1)
Firebase Auth
Firebase Realtime Database
不同的数据
用户管理 - 回复用户的完整数据并更改用户的密码或电子邮件地址 自定义身份验证 - 您可以将外部用户系统与Firebase集成。 身份验证 - 使用该服务在您自己的服务器上识别这些用户。
Firebase Auth有NODE JS sdk您可以使用。如果您想从 Android 访问此功能,则必须创建 Web服务(例如,恢复API)并通过网络与其进行通信。
Firebase实时数据库还有Admin SDK (Java and Node JS)
请在询问之前查看文档。
答案 2 :(得分:0)
请使用最新版本的Firebase SDK:firebase.google.com/docs。使用旧版SDK(正如您现在所做的那样)将导致比所需更难的时间。
您可以按如下方式获取用户信息:
const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp(functions.config().firebase);
// I'm actually not sure if this is how you do this part:
exports.getUserByEmail = (email) => {
return admin.auth().getUserByEmail(email);
}