Ste*_*Lee 24 firebase-authentication
我想将Firebase用于我的网络应用程序,该应用程序适用于护理院患有痴呆症的人.他们没有电子邮件或社交网络帐户,因此需要一个简单的用户名/密码注册/登录.
最简单的方法是什么?从我在文档中看到的我必须使用自定义身份验证流程但我没有现有的auth服务器.
如果我确实需要这样做,那么提供令牌的最简单方法是什么?在Azure中有功能,AWS有Lambda,但我在这里看不到Firebase
Alf*_*nas 15
您是正确的,此时Firebase Auth本身不支持用户名/密码登录.
您可以采用不需要将自定义身份验证与其他后端一起使用的解决方法是接受UI中的用户名,但在基础逻辑上,@yourowndomain.com在调用函数注册或使用电子邮件登录之前附加" ".
因此,您将使用电子邮件/密码身份验证,映射<username>到<username>@yourowndomain.com
Sau*_*kar 10
最后添加一个虚拟域是一种补丁,应该避免.要启用用户名登录,请按照以下简单步骤操作
注册
在注册期间,请使用用户ID,电子邮件和密码.使用普通电子邮件和密码注册用户.在成功时将电子邮件保存在单独节点(分支)中的user_id上.
mButtonSignUp.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(isValid()){
mProgressBar.setVisibility(View.VISIBLE);
final String userId = mEditTextUserId.getText().toString();
final String emailId = mEditTextEmail.getText().toString() ;
String password = mEditTextPassword.getText().toString() ;
firebaseRef.createUser(emailId, password, new Firebase.ResultHandler() {
@Override
public void onSuccess() {
firebaseRef.child("user_ids").child(userId).setValue(emailId);
Toast.makeText(getBaseContext(),"You are successfully registered ",Toast.LENGTH_SHORT).show();
mProgressBar.setVisibility(View.GONE);
}
@Override
public void onError(FirebaseError firebaseError) {
mProgressBar.setVisibility(View.GONE);
Toast.makeText(getBaseContext(),firebaseError.toString(),Toast.LENGTH_SHORT).show();
}
});
}
}
});
Run Code Online (Sandbox Code Playgroud)
数据库
数据库结构将如下所示
登录
检查用户是否输入了电子邮件或userId.如果是电子邮件ID,则直接使用它进行登录,否则获取与用户名关联的电子邮件ID并执行登录.
Button buttonLogIn = (Button)findViewById(R.id.button_login);
buttonLogIn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mProgressBar.setVisibility(View.VISIBLE);
String username = mEditTextEmail.getText().toString() ;
final String password = mEditTextPassWord.getText().toString() ;
// Check if it is an email or not
if(android.util.Patterns.EMAIL_ADDRESS.matcher(username).matches()) {
performLogin(username,password);
}else{
//get the emailId associated with the username
firebaseRef.child("user_ids").child(username)
.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if(dataSnapshot!=null){
String userEmail = dataSnapshot.getValue(String.class);
performLogin(userEmail,password);
}
}
@Override
public void onCancelled(FirebaseError firebaseError) {
//Handle Error
}
});
}
}
});
Run Code Online (Sandbox Code Playgroud)
private void performLogin(String emailId, String password) {
firebaseRef.authWithPassword(emailId,password, new Firebase.AuthResultHandler() {
@Override
public void onAuthenticated(AuthData authData) {
uid = authData.getUid() ;
Toast.makeText(getBaseContext(), authData.toString(), Toast.LENGTH_SHORT).show();
}
@Override
public void onAuthenticationError(FirebaseError firebaseError) {
Toast.makeText(getBaseContext(), firebaseError.toString(), Toast.LENGTH_SHORT).show();
}
});
}
Run Code Online (Sandbox Code Playgroud)
您可以使用 sign in with custom token
Firebase允许您使用安全的JSON Web令牌(JWT)对用户或设备进行身份验证,从而使您可以完全控制身份验证。您在服务器上生成这些令牌,将它们传递回客户端设备,然后使用它们通过signInWithCustomToken()方法进行身份验证。
signInWithCustomToken()方法从服务器使用自定义令牌登录| 归档时间: |
|
| 查看次数: |
22200 次 |
| 最近记录: |