gpt4 book ai didi

java - 每次用户在 Android 中注册时,都会在 firebase 数据库中创建一个新用户条目

转载 作者:行者123 更新时间:2023-12-02 11:12:40 25 4
gpt4 key购买 nike

我目前正在开发一个测验应用程序,用户通过 firebase 使用电子邮件和密码进行注册。

注册后,他将传递一个昵称,该昵称将用于获得高分。

所以基本上我希望应用程序在每次用户注册时添加此类用户信息,如附图所示。

enter image description here

为了实现这一点,我使用了以下代码:

public class createNickname extends AppCompatActivity {
private static final String TAG = "createNickname";

private FirebaseDatabase mFirebaseDatabase;
private FirebaseAuth.AuthStateListener mAuthListener;
private EditText NicknameInput;
private Button NicknameReg;
private String Nickname, UserId;
private FirebaseAuth mAuth;
private String EmailEntry;
private DatabaseReference myref = mFirebaseDatabase.getInstance().getReference();

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

NicknameInput = (EditText)findViewById(R.id.etNickname);
NicknameReg = (Button)findViewById(R.id.btsetNickname);

mAuth = FirebaseAuth.getInstance();

myref.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange( DataSnapshot dataSnapshot ) {
String value = dataSnapshot.getValue(String.class);
Log.d(TAG, "value is: " + value);
}

@Override
public void onCancelled( DatabaseError databaseError ) {
Log.w(TAG, "Failed to read value.", databaseError.toException());
}
});

NicknameReg.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick( View view ) {
Log.d(TAG, "onClick: Attempting to add object to database.");
String newNick = NicknameInput.getText().toString();
if (!newNick.equals("")) {
FirebaseUser user = mAuth.getCurrentUser();
UserId = user.getUid();
EmailEntry = user.getEmail();
myref.child("userlist").push().setValue(UserId);
myref.child("userlist").child(UserId).push().setValue(EmailEntry);
myref.child("userlist").child(UserId).push().setValue(0);

startActivity(new Intent(getApplicationContext(), LoginActivity.class));
}
}
});
}

@Override
public void onStart() {
super.onStart();
// Check if user is signed in (non-null) and update UI accordingly.
FirebaseUser currentUser = mAuth.getCurrentUser();
}
}

现在的问题是,我做错了什么?在 firebase 的身份验证窗口中创建了一个用户,但数据库并未更新。

我是否正确定位数据库?您如何决定要定位哪个数据库?

这些是我的 Firebase 安全规则:{ “规则”:{ “.read”:假, “.write”:假 }}

关于数据库,如果我正确的话,什么也不会发生。

我没有收到任何错误消息。

最佳答案

首先我建议add a completion callback到您的代码,以便您知道对 Firebase 的写入何时以及是否失败/成功。

在您的情况下,您会收到权限被拒绝错误,因为您的安全规则设置为 false -> 没有人有权读取/写入您的数据库。相反,您可以授予每个用户写入自己数据的权限,如下所示:

{
"rules": {
"userlist": {
"$user_id": {
// grants write access to the owner of this user account
// whose uid must exactly match the key ($user_id)
".write": "$user_id === auth.uid"
}
}
}
}

(有关更多信息,请参阅 the documentation)

要使上述工作正常进行,您还必须更改用于写入数据库的代码。当前您正在使用push()。这个generates a random id而你在这里不需要(想要)那个。相反,您可以使用 setValue() :

myref.child("userlist").push().setValue(UserId);

myref.child("userlist").child(UserId).child("email").setValue(EmailEntry);
myref.child("userlist").child(UserId).child("highscore").setValue(0);

您还可以查看my answer here有关此主题的更多信息。

关于java - 每次用户在 Android 中注册时,都会在 firebase 数据库中创建一个新用户条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50511594/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com