前言

用户是一个应用程序的核心。对于个人开发者来说,自己的应用程序积累到越多的用户,就会给自己带来越强的创作动力。因此Bmob提供了一个专门的用户类——BmobUser来自动处理用户账户管理所需的功能。
有了这个类,你就可以在你的应用程序中添加用户账户功能。

基本属性

关于Bmob的基本使用不再赘述,可以参考我前面一篇文章的总结,或者直接查看官方文档。
BmobUser是BmobObject的一个子类,它继承了BmobObject所有的方法,具有BmobObject相同的功能。不同的是,BmobUser增加了一些特定的关于用户账户管理相关的功能。
BmobUser除了从BmobObject继承的属性外,还有几个特定的属性:

  • username: 用户的用户名(必需)。
  • password: 用户的密码(必需)。
  • email: 用户的电子邮件地址(可选)。
  • emailVerified:邮箱认证状态(可选)。
  • mobilePhoneNumber:手机号码(可选)。
  • mobilePhoneNumberVerified:手机号码的认证状态(可选)。

创建用户

很多时候,你的用户表还会有很多其他字段,如性别、年龄、头像等。那么,你需要对BmobUser类进行扩展,添加一些新的属性。示例代码如下所示:

public class MyUser extends BmobUser {private Boolean sex;private String nick;private Integer age;public boolean getSex() {return this.sex;}public void setSex(boolean sex) {this.sex = sex;}public String getNick() {return this.nick;}public void setNick(String nick) {this.nick = nick;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}
}

创建用户对象如下:

BmobUser user = new BmobUser();

后台会有个用户表

注册与登录

1.注册

一般用户先输入用户名和密码,之后点击注册按钮提交注册信息,下面的代码是一个典型的注册过程:

   btn_reg.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {BmobUser user =new BmobUser();user.setUsername(et_user.getText().toString());user.setPassword(et_pass.getText().toString());user.signUp(new SaveListener<User>() {@Overridepublic void done(User user, BmobException e) {if(e==null){Toast.makeText(MainActivity.this,"注册成功",Toast.LENGTH_SHORT).show();}else{Log.e("注册失败", "原因: ",e );}}});}});

实现效果:

后台表:

在注册过程中,服务器会对注册用户信息进行检查,以确保注册的用户名和电子邮件地址是独一无二的。此外,对于用户的密码,你可以在应用程序中进行相应的加密处理后提交。

如果注册不成功,你可以查看返回的错误对象。最有可能的情况是,用户名或电子邮件已经被另一个用户注册。这种情况你可以提示用户,要求他们尝试使用不同的用户名进行注册。

你也可以要求用户使用Email做为用户名注册,这样做的好处是,你在提交信息的时候可以将输入的“用户名“默认设置为用户的Email地址,以后在用户忘记密码的情况下可以使用Bmob提供重置密码功能。

2.登录

当用户注册成功后,您需要让他们以后能够用注册的用户名登录到他们的账户使用应用。要做到这一点,你可以使用BmobUser类的login方法。

        btn_login.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {BmobUser userlogin=new BmobUser();userlogin.setUsername(et_user.getText().toString());userlogin.setPassword(et_pass.getText().toString());userlogin.login(new SaveListener<BmobUser>() {@Overridepublic void done(BmobUser bmobUser, BmobException e) {if(e==null){Toast.makeText(MainActivity.this,bmobUser.getUsername()+"登录成功",Toast.LENGTH_SHORT).show();}else {Log.e("登录失败", "原因: ", e);}}});}});

实现效果:

3.检验当前用户

如果用户在每次打开你的应用程序时都要登录,这将会直接影响到你应用的用户体验。为了避免这种情况,你可以使用缓存的CurrentUser对象。缓存的用户有效期为1年。

每当你应用的用户注册成功或是第一次登录成功,都会在本地磁盘中有一个缓存的用户对象,这样,你可以通过获取这个缓存的用户对象来进行登录:

BmobUser bmobUser = BmobUser.getCurrentUser();
if(bmobUser != null){// 允许用户使用应用
}else{//缓存用户对象为空时, 可打开用户注册界面…
}

注意:貌似多次登录会缓存最后一次登录的信息

更新与查询

1.更新用户信息

很多情况下你可能需要修改用户信息,比如你的应用具备修改个人资料的功能,Bmob提供的用户更新方式:
新建一个用户对象,并调用update(objectId,updateListener)方法来更新(推荐使用),示例:

BmobUser newUser = new BmobUser();
newUser.setEmail("xxx@163.com");
BmobUser bmobUser = BmobUser.getCurrentUser(context);
newUser.update(bmobUser.getObjectId(),new UpdateListener() {@Overridepublic void done(BmobException e) {if(e==null){toast("更新用户信息成功");}else{toast("更新用户信息失败:" + e.getMessage());}}
});

需要先登录后才能更新用户信息 否则会返回206 User cannot be altered without sessionToken Error错误。

2.查询用户信息

查询用户和查询普通对象一样,只需指定BmobUser类即可,如下:

BmobQuery<BmobUser> query = new BmobQuery<BmobUser>();
query.addWhereEqualTo("username", "lucky");
query.findObjects(new FindListener<BmobUser>() {@Overridepublic void done(List<BmobUser> object,BmobException e) {if(e==null){toast("查询用户成功:"+object.size());}else{toast("更新用户信息失败:" + e.getMessage());}}
});

浏览器中查看用户表
User表是一个特殊的表,专门存储BmobUser对象,就是这个表。

退出登录

退出登录非常简单,可以使用如下的代码:

BmobUser.logOut();   //清除缓存用户对象
BmobUser currentUser = BmobUser.getCurrentUser(); // 现在的currentUser是null了

密码修改

SDK为开发者提供了直接修改当前用户登录密码的方法,只需要传入旧密码和新密码,然后调用BmobUser提供的静态方法updateCurrentUserPassword即可,以下是示例:

BmobUser.updateCurrentUserPassword("旧密码", "新密码", new UpdateListener() {@Overridepublic void done(BmobException e) {if(e==null){toast("密码修改成功,可以用新密码进行登录啦");}else{toast("失败:" + e.getMessage());}}});

邮箱设置

1.邮箱登录

新增邮箱+密码登录方式,可以通过loginByAccount方法来操作:

BmobUser.loginByAccount(account, password, new LogInListener<MyUser>() {@Overridepublic void done(MyUser user, BmobException e) {if(user!=null){Log.i("smile","用户登陆成功");}}});

2.邮箱验证

设置邮件验证是一个可选的应用设置, 这样可以对已经确认过邮件的用户提供一部分保留的体验,邮件验证功能会在用户(User)对象中加入emailVerified字段, 当一个用户的邮件被新添加或者修改过的话,emailVerified会被默认设为false,如果应用设置中开启了邮箱认证功能,Bmob会对用户填写的邮箱发送一个链接, 这个链接可以把emailVerified设置为 true.

emailVerified 字段有 3 种状态可以考虑:

  • true : 用户可以点击邮件中的链接通过Bmob来验证地址,一个用户永远不会在新创建这个值的时候显示emailVerified为true。
  • false : 用户(User)对象最后一次被刷新的时候, 用户并没有确认过他的邮箱地址, 如果你看到emailVerified为false的话,你可以考虑刷新用户(User)对象。
  • missing : 用户(User)对象已经被创建,但应用设置并没有开启邮件验证功能; 或者用户(User)对象没有email邮箱。

2.1 请求验证Email

发送给用户的邮箱验证邮件会在一周内失效,可以通过调用 requestEmailVerify 来强制重新发送:

final String email = "xxx@qq.com";
BmobUser.requestEmailVerify(email, new UpdateListener() {@Overridepublic void done(BmobException e) {if(e==null){toast("请求验证邮件成功,请到" + email + "邮箱中进行激活。");}else{toast("失败:" + e.getMessage());}}
});

2.2 邮箱重置密码

开发者只需要求用户输入注册时的电子邮件地址即可:

inal String email = "xxx@163.com";
BmobUser.resetPasswordByEmail(email, new UpdateListener() {@Overridepublic void done(BmobException e) {if(e==null){toast("重置密码请求成功,请到" + email + "邮箱进行密码重置操作");}else{toast("失败:" + e.getMessage());}}
});

邮箱重置密码的流程如下:

  1. 用户输入他们的电子邮件,请求重置自己的密码
  2. Bmob向他们的邮箱发送一封包含特殊的密码重置链接的电子邮件。
  3. 用户根据向导点击重置密码连接,打开一个特殊的Bmob页面,根据提示他们可以输入一个新的密码。
  4. 用户的密码已被重置为新输入的密码。

小结

可以看到Bmob后端给我们提供了相当多的功能和解决方案,为我们开发节约了很多时间,关于注册登录这块还可以使用手机和第三方登陆等等方法,更多细节请参考官方文档。

Android基础学习总结(十二)——利用Bmob实现用户账户体系(注册、登录、验证等)相关推荐

  1. Python基础学习(十二)标准库

    一.操作接口系统 os模块提供了许多与操作系统关联的函数. 使用方法:import os 二.日常文件及目录管理 shutil模块 使用方法:import shutil >>> im ...

  2. Java基础学习第十二讲:Java面向对象---抽象类和接口

    Java面向对象-抽象类和接口 一.抽象类 抽象的定义: 我们在日常生活中,经常通过总结一些事物的共性来对事物进行分类,这种共性可能是一些相同的属性,也可能是一些相同的动作.通过总结,我们能够清晰的划 ...

  3. python基础学习(十二)变量进阶

    目录 1. 变量的引用 1.1 引用的概念 1.2 变量引用 的实例 1.3 函数的参数和返回值的传递 2. 可变和不可变类型 哈希 (hash) 3. 局部变量和全局变量 3.1 局部变量 3.2 ...

  4. 银河麒麟操作系统基础学习笔记十二

    如果我们开机时希望挂载某个硬盘或分区,需要修改/etc/fstab文件. 开机挂载时需要注意的事项: 根目录是必须挂载的,而且需要最先被挂载.挂载点必须是已经存在的目录. 所有挂载点在同一时间只能被挂 ...

  5. Tensorflow深度学习之十二:基础图像处理之二

    Tensorflow深度学习之十二:基础图像处理之二 from:https://blog.csdn.net/davincil/article/details/76598474   首先放出原始图像: ...

  6. LINUX学习基础篇(十二)痕迹命令

    LINUX学习基础篇(十二)痕迹命令 系统痕迹命令 w命令 who命令 last命令 lastlog命令 lastb命令 系统痕迹命令 系统中有一些重要的痕迹日志文件,如/var/log/wtmp./ ...

  7. Python语言入门这一篇就够了-学习笔记(十二万字)

    Python语言入门这一篇就够了-学习笔记(十二万字) 友情提示:先关注收藏,再查看,12万字保姆级 Python语言从入门到精通教程. 文章目录 Python语言入门这一篇就够了-学习笔记(十二万字 ...

  8. Java基础学习——第十四章 网络编程

    Java基础学习--第十四章 网络编程 一.网络编程概述 计算机网络: 把分布在不同地理区域的计算机与专门的外部设备用通信线路互连成一个规模大.功能强的网络系统,从而使众多的计算机可以方便地互相传递信 ...

  9. OpenCV学习笔记(十二)——图像分割与提取

    在图像处理的过程中,经常需要从图像中将前景对象作为目标图像分割或者提取出来.例如,在视频监控中,观测到的是固定背景下的视频内容,而我们对背景本身并无兴趣,感兴趣的是背景中出现的车辆.行人或者其他对象. ...

最新文章

  1. HDU 5972 Regular Number(ShiftAnd+读入优化)
  2. 49.SCVMM管理下的Hyper-V到Azure的异地(Azure)容灾
  3. 华东信标组预赛前三名
  4. pymongo连接mongodb的replset
  5. 挖一挖C#中那些我们不常用的东西之系列(3)——StackTrace,Trim
  6. 买卖股票的最佳时机IV
  7. 探索比特币源码3-熟悉RPC接口
  8. 大型高并发与高可用的三层缓存架构总结
  9. php fatal error: cannot redeclare,Fatal error: Cannot redeclare 常见问题_PHP教程
  10. 元宇宙营销新时代| 元宇宙数字营销峰会于7月29日在上海淳大万丽酒店盛大开幕!
  11. how to manage your time effectively!!
  12. 固态硬盘是什么接口_电脑M.2接口讲究多:读懂固态硬盘完整规格
  13. LCCUP‘22秋季编程大赛(个人赛)总结
  14. 我辛辛苦苦做了一个月的项目,组长年底用来写了晋升PPT
  15. 《趣弹幕-滚动LED显示屏-隐私协议》
  16. win10开机有东西一闪而过_Win10 开机以后不一会儿会弹出一个黑框,usoclient.exe 一闪而过。这东西对电脑有...
  17. 1万块钱存入银行,10年后,连本带利能取多少钱?
  18. 兄弟连区块链入门教程分享区块链POW证明代码实现demo
  19. 崔健没变,北汽极狐该做出改变了
  20. MODIS地表温度产品获取处理

热门文章

  1. C++读入txt,写入txt,循环读入txt,循环写入txt
  2. 手工删除Oracle 12C数据库实例
  3. 港科百创|宇链科技喜获杭州准独角兽企业荣誉称号
  4. oracle nvarchar2问题,oracle中nvarchar2查询结果显示总是少一位
  5. 苹果App Store侵权投诉流程
  6. 【python】SVM算法介绍
  7. #!/usr/bin/env与#!/usr/bin/
  8. OPPO手机和华为手机哪个好一点?看了这篇文章你就秒懂了
  9. Beginning Ruby: From Novice to Professional
  10. 让selenium不自动关闭浏览器