代码之家  ›  专栏  ›  技术社区  ›  Asset Bekbossynov

通过电子邮件和密码使用firebase注册用户?

  •  2
  • Asset Bekbossynov  · 技术社区  · 9 年前

    我使用Firebase授权创建了注册活动,并试图注册新用户,但当我按下注册按钮时,我的代码出现异常

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_register);
        etUsername = (EditText) findViewById(R.id.etUserName);
        etEmail = (EditText) findViewById(R.id.etEmailRegiter);
        etPassword = (EditText) findViewById(R.id.etPasswordRegiter);
        etPasswordRe = (EditText) findViewById(R.id.etPasswordRegiterRe);
    
        register = (Button) findViewById(R.id.btnRegister);
    
        passwordRule = (LinearLayout) findViewById(R.id.password_rule);
    
        etPassword.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                passwordRule.setVisibility(View.VISIBLE);
            }
        });
    
        mAuth = FirebaseAuth.getInstance();
        register.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                createAccount(etUsername.getText().toString(), etPassword.getText().toString());
            }
        });
    
    }
    
    private void createAccount(String email, String password) {
        Log.d(LOG_TAG, "createAccount:" + email);
    //        if (!validateForm()) {
    //            return;
    //        }
    
        mAuth.createUserWithEmailAndPassword(email, password)
                .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
                    @Override
                    public void onComplete(@NonNull Task<AuthResult> task) {
                        if (task.isSuccessful()) {
                            Log.d(LOG_TAG, "createUserWithEmail:success");
                            FirebaseUser user = mAuth.getCurrentUser();
    
                            Log.d(LOG_TAG, ":" + mDatabase.child(PATH_TO_DATA_USERS));
    
    //                            sendEmailVerification();
    //                            Intent intent = new Intent(getContext(), MainActivity.class);
    //                            intent.putExtra("user", user.getUid());
    //                            startActivity(intent);
                            }
                             else {
                                try {
                                    throw task.getException();
                                } catch(FirebaseAuthWeakPasswordException e) {
                                    etPassword.setError("weak password");
                                    etPassword.requestFocus();
                                } catch(FirebaseAuthInvalidCredentialsException e) {
                                    etEmail.setError("invalid credential exception");
                                    etEmail.requestFocus();
                                } catch(FirebaseAuthUserCollisionException e) {
                                    etEmail.setError("collision exception");
                                    etEmail.requestFocus();
                                } catch(Exception e) {
                                    Log.e(LOG_TAG, e.getMessage());
                                }
                                Log.w(LOG_TAG, "createUserWithEmail:failure", task.getException());
                                Log.d(LOG_TAG, ":" + (mAuth == null));
                                Toast.makeText(RegisterActivity.this, "Authentication failed.",
                                        Toast.LENGTH_SHORT).show();
                            }
    
                        }
                    });
        }
    

    xml代码:

        <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical" android:layout_width="match_parent"
        android:layout_height="match_parent">
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical"
            android:layout_marginTop="50dp"
            >
            <EditText
                android:id="@+id/etUserName"
                android:layout_marginLeft="15dp"
                android:layout_marginRight="15dp"
                android:layout_width="match_parent"
                android:layout_weight="1"
                android:layout_height="wrap_content"
                android:hint="@string/hint_user_name"/>
            <EditText
                android:id="@+id/etEmailRegiter"
                android:layout_marginLeft="15dp"
                android:layout_marginRight="15dp"
                android:layout_width="match_parent"
                android:layout_weight="1"
                android:layout_height="wrap_content"
                android:hint="@string/hint_email"/>
            <EditText
                android:id="@+id/etPasswordRegiter"
                android:layout_marginLeft="15dp"
                android:layout_marginRight="15dp"
                android:layout_width="match_parent"
                android:layout_weight="1"
                android:hint="@string/hint_password"
                android:inputType="textPassword"
                android:layout_height="wrap_content"/>
            <EditText
                android:id="@+id/etPasswordRegiterRe"
                android:layout_marginLeft="15dp"
                android:layout_marginRight="15dp"
                android:layout_width="match_parent"
                android:layout_weight="1"
                android:hint="@string/hint_password_re"
                android:inputType="textPassword"
                android:layout_height="wrap_content"/>
    
        </LinearLayout>
        <LinearLayout
            android:id="@+id/password_rule"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:visibility="gone">
            <TextView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:text="@string/password_rule"
                android:layout_marginLeft="17dp"
                android:layout_marginRight="17dp"
                android:layout_marginTop="5dp"
                android:textSize="17sp"/>
        </LinearLayout>
        <Button
            android:id="@+id/btnRegister"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="5dp"
            android:layout_marginLeft="20dp"
            android:layout_marginRight="20dp"
            android:text="@string/button_register"/>
    
    </LinearLayout>
    

    在日志中得到这样的错误

    E/Volley: [187] BasicNetwork.performRequest: Unexpected response code 400 for https://www.googleapis.com/identitytoolkit/v3/relyingparty/signupNewUser?key=AIzaSyAPBVdM4hZpPBvTZrvE9gBjld0otb202Lg
    I/AuthChimeraService: Error description received from server: {
      "error": {
       "errors": [
        {
         "domain": "global",
         "reason": "invalid",
         "message": "INVALID_EMAIL"
        }
       ],
       "code": 400,
       "message": "INVALID_EMAIL"
      }
     }
    

    这是我的gradle依存关系

    compile 'com.google.firebase:firebase-database:10.0.1'
    compile 'com.google.firebase:firebase-core:10.0.1'
    compile 'com.google.firebase:firebase-auth:10.0.1'
    
    2 回复  |  直到 9 年前
        1
  •  1
  •   Shariq Musharaf    9 年前

    可能用户输入的电子邮件无效。电子邮件应采用这种格式= "myname@domain.com" https://firebase.google.com/docs/auth/custom-email-handler https://firebase.google.com/docs/reference/js/firebase.auth.Auth

    编辑: 您正在发送 发送到电子邮件变量,而不是 “电子邮件”

    createAccount(etUsername.getText().toString(), etPassword.getText().toString()); etEmail
    请记住,当你注册时,你是用电子邮件而不是用户名注册的!

        2
  •  -2
  •   JuanLucena    9 年前

    我也开始使用Firebase了,我用这段代码在我的应用程序中注册新用户,效果很好。

    public void doRegister(final String username, String password) {
    
        HideAppApplication.mAuth.createUserWithEmailAndPassword(username, password)
                .addOnCompleteListener(activity, new OnCompleteListener<AuthResult>() {
                    @Override
                    public void onComplete(@NonNull Task<AuthResult> task) {
                        Log.d("LOGIN", "createUserWithEmail:onComplete:" + task.isSuccessful());
    
                        if (task.isSuccessful()){
                            User user = new User();
                            user.setUserId(username);
                            DatabaseReference mDatabase = FirebaseDatabase.getInstance().getReference().child("user");
                            mDatabase.child(task.getResult().getUser().getUid()).setValue(user);
                        }
    
                        onRegisterRequested.registerRequested(task);
                    }
                });
    }
    

    你可以看看我的项目 github