title: 用户管理

本篇文档介绍如何使用 Wilddog Auth 管理用户。它包括:创建用户、获取用户信息、获取用户属性、更新用户信息、删除用户等。

创建用户

创建用户包含以下四种方法:

  • 通过 手机登录 创建
  • 通过 邮箱密码 创建
  • 通过第三方身份认证提供商授权创建
  • 在 控制面板—身份认证—用户 中手动创建

获取用户信息

用户信息包含 用户属性 及用户的登录信息。

获取当前登录用户

获取当前登录用户是管理用户的基础。

使用监听器:

  1. WilddogAuth auth = WilddogAuth.getInstance();
  2. auth.addAuthStateListener(new WilddogAuth.AuthStateListener(){
  3. // 设置 Auth 监听器
  4. @Override
  5. public void onAuthStateChanged(WilddogAuth wilddogauth){
  6. WilddogUser user = wilddogauth.getCurrentUser();
  7. if (user != null) {
  8. // 用户已登录
  9. } else {
  10. // 没有用户登录
  11. }
  12. }
  13. });

使用 getCurrentUser () 方法获取当前登录:

  1. WilddogAuth auth = WilddogAuth.getInstance();
  2. WilddogUser user = auth.getCurrentUser();
  3. if (user != null) {
  4. // 用户已登录
  5. } else {
  6. // 没有用户登录
  7. }

注意:

推荐使用监听器,这样可以保证在你获取当前用户时 Auth 实例不会处于中间状态,如用户正在登录时。 用户可以在登陆后通过 WilddogAuth.getInstance().getCurrentUser() 在任何需要的时候获取到 WilddogUser 对象。

获取用户属性

WilddogUser 实例可以用于获取用户属性。

  1. WilddogUser user = auth.getCurrentUser();
  2. if (user != null) {
  3. String uid = user.getUid();
  4. String providerId = user.getProviderId();
  5. String phone = user.getPhone();
  6. String name = user.getDisplayName();
  7. Uri photoUrl = user.getPhotoUrl();
  8. String email = user.getEmail();
  9. } else {
  10. // 没有用户登录.
  11. }

获取 Provider 的用户属性

providerData 用于获取所有 Provider 的用户属性。

  1. WilddogUser user = auth.getCurrentUser();
  2. String uid = user.getUid();
  3. List<WilddogUser> userProviderInfos = user.getProviderData();
  4. for (UserInfo profile : userProviderInfos) {
  5. String providerId = profile.getProviderId();
  6. String uid = profile.getUid();
  7. String name = profile.getDisplayName();
  8. String email = profile.getEmail();
  9. Uri photoUrl = profile.getPhotoUrl();
  10. };

更新用户信息

WilddogUser 实例用于更新 用户属性 及用户的登录信息。

更新用户属性

updateProfile() 方法用于更新用户属性。

例如,更新用户的displayNamephotoURL 属性:

  1. WilddogUser user = auth.getCurrentUser();
  2. UserProfileChangeRequest profileUpdates = new UserProfileChangeRequest.Builder()
  3. .setDisplayName("name")
  4. .setPhotoUri(Uri.parse("https://example.com/path/photo.jpg"))
  5. .build();
  6. user.updateProfile(profileUpdates)
  7. .addOnCompleteListener(new OnCompleteListener<Void>() {
  8. @Override
  9. public void onComplete(Task<Void> task) {
  10. if (task.isSuccessful()) {
  11. // 更新成功
  12. }else{
  13. // 发生错误
  14. }
  15. }
  16. });

注意:

使用 customToken 登录时,若该登录用户为 admin 用户,则不能更新用户属性。

更新用户手机号

updatePhone() 方法用于更新用户手机号。

  1. WilddogUser user = auth.getCurrentUser();
  2. String phone = "12345678901";
  3. user.updatePhone(phone)
  4. .addOnCompleteListener(new OnCompleteListener<Void>() {
  5. @Override
  6. public void onComplete(Task<Void> task) {
  7. if (task.isSuccessful()) {
  8. // 更新成功
  9. }else{
  10. // 发生错误
  11. Log.d("result",task.getException().toString()) ;
  12. }
  13. }
  14. });

注意:

  • 要更新手机号,该用户必须最近登录过。请参考 重新进行身份认证
  • 使用 customToken 登录时,若该登录用户为 admin 用户,则不能更新用户手机号。

重置手机号认证密码

1.发送重置密码的手机验证码:

  1. String phone = "18888888888";
  2. auth.sendPasswordResetSms(phone)
  3. .addOnCompleteListener(new OnCompleteListener<Void>() {
  4. @Override
  5. public void onComplete(Task<Void> task) {
  6. if (task.isSuccessful()) {
  7. // 发送成功
  8. }else{
  9. // 发生错误
  10. Log.d("result",task.getException().toString()) ;
  11. }
  12. }
  13. });

2.确认重置密码手机验证码:

  1. String phone = "18888888888";
  2. String code = "090909";
  3. String newPass = "newpassword123";
  4. auth.confirmPasswordResetSms(phonecodenewPass)
  5. .addOnCompleteListener(new OnCompleteListener<Void>() {
  6. @Override
  7. public void onComplete(Task<Void> task) {
  8. if (task.isSuccessful()) {
  9. // 重置成功
  10. }else{
  11. // 发生错误
  12. Log.d("result",task.getException().toString()) ;
  13. }
  14. }
  15. });

更新邮箱地址

updateEmail() 方法用于更新用户邮箱地址。

  1. WilddogUser user = auth.getCurrentUser();
  2. user.updateEmail("12345678@gmail.com")
  3. .addOnCompleteListener(new OnCompleteListener<Void>() {
  4. @Override
  5. public void onComplete(Task<Void> task) {
  6. if (task.isSuccessful()) {
  7. // 更新成功
  8. }else{
  9. // 发生错误
  10. Log.d("result" ,task.getException().toString()) ;
  11. }
  12. }
  13. });

注意:

  • 要更新用户的邮箱地址,该用户必须最近登录过。请参考 重新进行身份认证
  • 使用 customToken 登录时,若该登录用户为 admin 用户,则不能更新邮箱地址。

更新用户邮箱或手机号认证密码

updatePassword() 方法用于更新用户邮箱或手机号认证密码。

  1. WilddogUser user = auth.getCurrentUser();
  2. String newPassword = "12345678";
  3. user.updatePassword(newPassword)
  4. .addOnCompleteListener(new OnCompleteListener<Void>() {
  5. @Override
  6. public void onComplete(Task<Void> task) {
  7. if (task.isSuccessful()) {
  8. // 更新成功
  9. }else{
  10. // 发生错误
  11. Log.d("result",task.getException().toString()) ;
  12. }
  13. }
  14. });

注意:

  • 要更新密码,该用户必须最近登录过。请参考 重新进行身份认证
  • 使用 customToken 登录时,若该登录用户为 admin 用户,则不能更新用户密码。

发送重置密码邮件

sendPasswordResetEmail() 方法用于向用户发送重设密码邮件。

  1. String emailAddress = "12345678@gmail.com";
  2. auth.sendPasswordResetEmail(emailAddress)
  3. .addOnCompleteListener(new OnCompleteListener<Void>() {
  4. @Override
  5. public void onComplete(Task<Void> task) {
  6. if (task.isSuccessful()) {
  7. // 更新成功
  8. }else{
  9. // 发生错误
  10. Log.d("result",task.getException().toString()) ;
  11. }
  12. }
  13. });

注意:

在控制面板 身份认证—登录方式—邮箱登录 中可以设置邮件自定义模板。

删除用户

删除用户的方式有以下两种:

  • 通过 delete() 方法删除
  • 在控制面板身份认证—用户 中手动删除

使用 delete() 方法:

  1. auth.getCurrentUser().delete()
  2. .addOnCompleteListener(new OnCompleteListener<Void>() {
  3. @Override
  4. public void onComplete(Task<Void> task) {
  5. if (task.isSuccessful()) {
  6. // 删除成功
  7. }else{
  8. // 发生错误
  9. Log.d("result",task.getException().toString()) ;
  10. }
  11. }
  12. });

使用控制面板:

title: 用户管理 - 图1

注意:

  • 要删除用户,该用户必须最近登录过。请参考 重新进行身份认证
  • 使用 customToken 登录时,若该登录用户为 admin 用户,则不能更新用户密码。

重新进行身份认证

用户长时间未登录的情况下进行下列安全敏感操作会失败:

  • 删除帐户
  • 设置主邮箱地址
  • 更改密码

此时需要重新对用户进行身份认证。

reauthenticate(credential) 方法用于对用户重新进行身份认证。

  1. WilddogUser user = auth.getCurrentUser();
  2. AuthCredential credential = EmailAuthProvider
  3. .getCredential("12345678@gmail.com", "12345678");
  4. user.reauthenticate(credential)
  5. .addOnCompleteListener(new OnCompleteListener<Void>() {
  6. @Override
  7. public void onComplete( Task<Void> task) {
  8. if (task.isSuccessful()) {
  9. // 重新认证成功
  10. }else{
  11. // 发生错误
  12. Log.d("result",task.getException().toString()) ;
  13. }
  14. }
  15. });