了解 firebase 的 createUser 函数(特别是 android 库)
Understanding createUser function of firebase(specifically android library)
所以我从 firebase 文档中获得了以下代码(我已经在我的应用程序中实现了它并且运行良好):
Firebase ref = new Firebase("https://myapp.firebaseio.com");
ref.createUser("bobtony@firebase.com", "correcthorsebatterystaple", new Firebase.ValueResultHandler<Map<String, Object>>() {
@Override
public void onSuccess(Map<String, Object> result) {
System.out.println("Successfully created user account with uid: " + result.get("uid"));
}
@Override
public void onError(FirebaseError firebaseError) {
// there was an error
}
});
创建用户后,它会在控制台上打印其 uid。但是,当我输入 myapp.firebaseio.com 时,那里什么也没有。所以我有一些问题:
- firebase 在哪里存储这个新创建的用户?
- 如何添加一些自定义字段? (此功能仅使用电子邮件和密码)即用户名
所以,我试图做的是在 onSuccess() 内部我使用了 ref.push() 一些值 myapp.firebaseio.com 但是然后..我如何检查用户 uid 是否由createUser() 和我推送的一样吗? (ID 不同!)
我希望我的文字是清楚的,如果没有被问到,我可以尝试再次解释!
非常感谢!
用户信息未存储在您的 Firebase 数据库中。对于匿名用户和 OAuth 用户,任何地方都不会存储任何信息。电子邮件+密码用户的信息保存在您无权访问的单独数据库中。电子邮件+密码用户当然在您仪表板的“登录和身份验证”选项卡中可见,只是不在您的数据库中。
如果您想将用户信息存储在您自己的 Firebase 数据库中,您必须在创建或验证用户时自行将其存储在那里。有一个 section on storing user data in the Firebase documentation 显示了如何执行此操作。
必须自己存储信息的一个优点是,您可以准确确定存储的内容和未存储的内容。
正如弗兰克所说;在创建用户时,不会自动将用户信息放入 firebase 本身(而是查看仪表板侧边栏中的登录和身份验证)。新用户创建后甚至没有登录。这是我在注册时用于登录并将新用户放入 firebase 的代码:
static void createUser(final String username, final String password) {
final Firebase rootRef = new Firebase("YOUR_FIREBASE_URL");
rootRef.createUser(
username,
password,
new Firebase.ResultHandler() {
@Override
public void onSuccess() {
// Great, we have a new user. Now log them in:
rootRef.authWithPassword(
username,
password,
new Firebase.AuthResultHandler() {
@Override
public void onAuthenticated(AuthData authData) {
// Great, the new user is logged in.
// Create a node under "/users/uid/" and store some initial information,
// where "uid" is the newly generated unique id for the user:
rootRef.child("users").child(authData.getUid()).child("status").setValue("New User");
}
@Override
public void onAuthenticationError(FirebaseError error) {
// Should hopefully not happen as we just created the user.
}
}
);
}
@Override
public void onError(FirebaseError firebaseError) {
// Couldn't create the user, probably invalid email.
// Show the error message and give them another chance.
}
}
);
}
到目前为止,这对我来说效果很好。我想如果连接在所有事情的中间被中断,可能会出现问题(可能最终用户没有它的初始信息)。不要太依赖它的设置...
可能是根据 Firebase 弃用的前一个。他们正在创造新概念
//create user
auth.createUserWithEmailAndPassword(email, password)
.addOnCompleteListener(SignupActivity.this, new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
Toast.makeText(SignupActivity.this, "createUserWithEmail:onComplete:" + task.isSuccessful(), Toast.LENGTH_SHORT).show();
progressBar.setVisibility(View.GONE);
// If sign in fails, display a message to the user. If sign in succeeds
// the auth state listener will be notified and logic to handle the
// signed in user can be handled in the listener.
if (!task.isSuccessful()) {
Toast.makeText(SignupActivity.this, "Authentication failed." + task.getException(),
Toast.LENGTH_SHORT).show();
} else {
Log.e("task",String.valueOf(task));
getUserDetailse(auth);
}
}
});
/获取针对 FirebaseAuth 身份验证的用户详细信息/
public static void getUserDetailse(FirebaseAuth auth)
{
//
auth.addAuthStateListener(new FirebaseAuth.AuthStateListener() {
@Override
public void onAuthStateChanged(@NonNull final FirebaseAuth firebaseAuth) {
final FirebaseUser user = firebaseAuth.getCurrentUser();
if (user != null) {
Log.i("AuthStateChanged", "User is signed in with uid: " + user.getUid());
String name = user.getDisplayName();
String email = user.getEmail();
Uri photoUrl = user.getPhotoUrl();
// The user's ID, unique to the Firebase project. Do NOT use this value to
// authenticate with your backend server, if you have one. Use
// FirebaseUser.getToken() instead.
String uid = user.getUid();
Log.e("user",name+email+photoUrl);
} else {
Log.i("AuthStateChanged", "No user is signed in.");
}
}
});
}
所以我从 firebase 文档中获得了以下代码(我已经在我的应用程序中实现了它并且运行良好):
Firebase ref = new Firebase("https://myapp.firebaseio.com");
ref.createUser("bobtony@firebase.com", "correcthorsebatterystaple", new Firebase.ValueResultHandler<Map<String, Object>>() {
@Override
public void onSuccess(Map<String, Object> result) {
System.out.println("Successfully created user account with uid: " + result.get("uid"));
}
@Override
public void onError(FirebaseError firebaseError) {
// there was an error
}
});
创建用户后,它会在控制台上打印其 uid。但是,当我输入 myapp.firebaseio.com 时,那里什么也没有。所以我有一些问题:
- firebase 在哪里存储这个新创建的用户?
- 如何添加一些自定义字段? (此功能仅使用电子邮件和密码)即用户名
所以,我试图做的是在 onSuccess() 内部我使用了 ref.push() 一些值 myapp.firebaseio.com 但是然后..我如何检查用户 uid 是否由createUser() 和我推送的一样吗? (ID 不同!)
我希望我的文字是清楚的,如果没有被问到,我可以尝试再次解释!
非常感谢!
用户信息未存储在您的 Firebase 数据库中。对于匿名用户和 OAuth 用户,任何地方都不会存储任何信息。电子邮件+密码用户的信息保存在您无权访问的单独数据库中。电子邮件+密码用户当然在您仪表板的“登录和身份验证”选项卡中可见,只是不在您的数据库中。
如果您想将用户信息存储在您自己的 Firebase 数据库中,您必须在创建或验证用户时自行将其存储在那里。有一个 section on storing user data in the Firebase documentation 显示了如何执行此操作。
必须自己存储信息的一个优点是,您可以准确确定存储的内容和未存储的内容。
正如弗兰克所说;在创建用户时,不会自动将用户信息放入 firebase 本身(而是查看仪表板侧边栏中的登录和身份验证)。新用户创建后甚至没有登录。这是我在注册时用于登录并将新用户放入 firebase 的代码:
static void createUser(final String username, final String password) {
final Firebase rootRef = new Firebase("YOUR_FIREBASE_URL");
rootRef.createUser(
username,
password,
new Firebase.ResultHandler() {
@Override
public void onSuccess() {
// Great, we have a new user. Now log them in:
rootRef.authWithPassword(
username,
password,
new Firebase.AuthResultHandler() {
@Override
public void onAuthenticated(AuthData authData) {
// Great, the new user is logged in.
// Create a node under "/users/uid/" and store some initial information,
// where "uid" is the newly generated unique id for the user:
rootRef.child("users").child(authData.getUid()).child("status").setValue("New User");
}
@Override
public void onAuthenticationError(FirebaseError error) {
// Should hopefully not happen as we just created the user.
}
}
);
}
@Override
public void onError(FirebaseError firebaseError) {
// Couldn't create the user, probably invalid email.
// Show the error message and give them another chance.
}
}
);
}
到目前为止,这对我来说效果很好。我想如果连接在所有事情的中间被中断,可能会出现问题(可能最终用户没有它的初始信息)。不要太依赖它的设置...
可能是根据 Firebase 弃用的前一个。他们正在创造新概念
//create user
auth.createUserWithEmailAndPassword(email, password)
.addOnCompleteListener(SignupActivity.this, new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
Toast.makeText(SignupActivity.this, "createUserWithEmail:onComplete:" + task.isSuccessful(), Toast.LENGTH_SHORT).show();
progressBar.setVisibility(View.GONE);
// If sign in fails, display a message to the user. If sign in succeeds
// the auth state listener will be notified and logic to handle the
// signed in user can be handled in the listener.
if (!task.isSuccessful()) {
Toast.makeText(SignupActivity.this, "Authentication failed." + task.getException(),
Toast.LENGTH_SHORT).show();
} else {
Log.e("task",String.valueOf(task));
getUserDetailse(auth);
}
}
});
/获取针对 FirebaseAuth 身份验证的用户详细信息/
public static void getUserDetailse(FirebaseAuth auth)
{
//
auth.addAuthStateListener(new FirebaseAuth.AuthStateListener() {
@Override
public void onAuthStateChanged(@NonNull final FirebaseAuth firebaseAuth) {
final FirebaseUser user = firebaseAuth.getCurrentUser();
if (user != null) {
Log.i("AuthStateChanged", "User is signed in with uid: " + user.getUid());
String name = user.getDisplayName();
String email = user.getEmail();
Uri photoUrl = user.getPhotoUrl();
// The user's ID, unique to the Firebase project. Do NOT use this value to
// authenticate with your backend server, if you have one. Use
// FirebaseUser.getToken() instead.
String uid = user.getUid();
Log.e("user",name+email+photoUrl);
} else {
Log.i("AuthStateChanged", "No user is signed in.");
}
}
});
}