在移动开发的过程中,我们通常会看到许多的应用都是使用手机号注册进行登录的,这样做可以让注册账号和登录的用户体验变得更加简单,读取通讯录后能更加容易的建立用户关系等等优点。当然有优点必然也会存在缺点,用手机号的最大问题就在于手机是可以被更换的(例如你换了城市,或者转网,转套餐,换了手机号)。而换掉的手机号是可能被分配给别人的。这导致有可能一个人拿到一个新的手机号,用XX应用,却发现这个手机号已经注册,这时有两种处理方式:1,如果你使用手机号短信认证来找回帐号的话,那么这个新的手机用户将可以轻易的获得这个手机号相关的原有帐号。2,如果你不允许手机号短信找回,那么将导致这个用户拿着自己新上的手机号无法使用XX应用。

今天我们在这里就先不讨论这个使用手机号注册的利弊问题了,这和今天的标题不符。

唉呀…. 不知道怎么开始写了,先上几张图吧。

登录 注册 重置密码

是的,其实就一个界面,做三件事情。程序员都爱偷懒,不喜欢做重复的事情,还有就是不爱写文字。^_^

/*** 登录* @param username* @param password*/
private void login(String username, String password){if(TextUtils.isEmpty(username)){mUserNameTextInputLayout.setError(getString(R.string.username_is_null));return;}else if(TextUtils.isEmpty(password)){mPasswordTextInputLayout.setError(getString(R.string.password_is_null));return;}else{//否则隐藏上次错误mUserNameTextInputLayout.setErrorEnabled(false);mPasswordTextInputLayout.setErrorEnabled(false);}mProgressBar.setVisibility(View.VISIBLE);     // 显示圆形进度条mBtnLogin.setEnabled(false);     // 为了避免用户重复点击登录按钮,在开始执行登录请求时将登录按钮设置为不可用状态appAction.login(username.replace(" ", ""), password, new ActionCallbackListener<Void>() {@Overridepublic void onSuccess(Void data) {// 登陆成功startActivity(new Intent(application, MainActivity.class));finish();}@Overridepublic void onFailure(int errorEvent, String message) {showToast(message);mProgressBar.setVisibility(View.INVISIBLE);  // 隐藏圆形进度条mBtnLogin.setEnabled(true);  // 登录失败时,将登录按钮恢复为可用状态}});
}

以上代码中username.replace(” “,”“)是因为在EditView中用户输入的手机号码,我做了显示格式处理(xxx xxxx xxxx),所以在提交给登录接口时需要将手机号码中的空格去掉再提交。因为项目是采用的MVP架构,以上的代码只是View层的实现,真正的登录实现是在Model层中使用BmobSDK进行的登录操作。

/*** Model层-登录* @param username  用户名* @param password  密码* @param listener  回调监听*/@Overridepublic void login(String username, String password, final ResponseListener<Void> listener) {BmobUser user = new BmobUser();user.setUsername(username);user.setPassword(password);user.login(mContext, new SaveListener() {@Overridepublic void onSuccess() {listener.onSuccess(null);}@Overridepublic void onFailure(int i, String s) {listener.onFailure(i, s);}});}

这里只是将手机号码作为了username,所以和前两篇文章使用的登录方法是一样的。接下来是手机号注册的实现,在这篇文章的示例中,手机号注册用到了三个元素(手机号、验证码、密码)。实际上用Bmob SDK提供的手机号注册方法是只需要手机号和验证码即可完成注册过程的,为什么示例中却还有另一个密码值呢?我们先看完代码再说。

/*** Model层-手机号注册* @param phone_number 手机号码* @param password 注册时设置的密码* @param security_code 短信验证码* @param listener 回调*/@Overridepublic void signUp(String phone_number, String password, String security_code, final ResponseListener<Void> listener) {User user = new User();user.setUsername(phone_number);user.setPassword(password);user.setMobilePhoneNumber(phone_number);user.setNickname(phone_number);user.signOrLogin(mContext, security_code, new SaveListener() {@Overridepublic void onSuccess() {listener.onSuccess(null);}@Overridepublic void onFailure(int i, String s) {listener.onFailure(i, s);}});}

以上代码中User对象是继承自BmobUser的,并扩展了一个nickname(昵称)属性。BmobUser类有一个静态方法 signOrLoginByMobilePhone(Context context, String phoneNumber, String security_code, LogInListener listener) 是用来做手机号一键注册或登录的。

但是如果注册时需要设置其他属性(如:昵称等等)一同提交就不能用signOrLoginByMobilePhone了。所以为了满足这样的需求,我采用了另一种方法 signOrLogin 来实现。并且将手机号码设置为默认的用户名’user.setUsername(phone_number)‘,默认初始密码为123456 ‘user.setPassword(password)’ 以及用手机号码作为默认的昵称‘user.setNickname(phone_number)’

接下来看看重置密码部分的实现:

/*** 验证码重置密码* @param security_code 短信验证码* @param new_pwd 新密码* @param listener 回调*/@Overridepublic void resetPasswordBySMSCode(String security_code, String new_pwd, final ResponseListener<Void> listener) {BmobUser.resetPasswordBySMSCode(mContext, security_code, new_pwd, new ResetPasswordByCodeListener() {@Overridepublic void done(BmobException ex) {if (ex == null) {listener.onSuccess(null);} else {listener.onFailure(ex.getErrorCode(), ex.getLocalizedMessage());}}});}

很简单,只需要调用BmobUser的静态方法resetPasswordBySMSCode,传入新密码和短信验证码即可完成重置密码的过程。

最后再说一下注册和重置密码中用到的短信验证码的获取方法:

/*** 请求验证码* @param phone_number 手机号* @param template_name 验证码模板名称* @param listener 回调*/@Overridepublic void requestSMSCode(String phone_number, String template_name, final ResponseListener<String> listener) {BmobSMS.requestSMSCode(mContext, phone_number, template_name, new RequestSMSCodeListener() {@Overridepublic void done(Integer integer, BmobException e) {if (e == null) {listener.onSuccess(integer.toString());} else {listener.onFailure(e.getErrorCode(), e.getMessage());}}});}

验证码模板名称是在Bmob后台创建短信内容模板定义的名称,可以为注册、重置密码创建不同的短信模板,比如:”xx应用,您的注册验证码为xxxxxx。”,”xx应用,您正在重置密码,验证码为xxxxxx,如非本人操作,请忽略。”

使用手机号登录、注册、重置密码相关推荐

  1. IDEA版最新SMM整合,根据手机号实现登录/注册/修改密码

    IDEA版最新SMM整合,根据手机号实现登录/注册/修改密码 最近一直在进行springboot的项目,前一阵子项目组接手了一个SSM项目,需要实现手机短信验证的相关功能.于是自己进行了重操,整合了网 ...

  2. 5.登录注册找回密码

    登录注册找回密码 登录  登录方式有账号密码登录.扫码登录.手机验证登录和第三方登录.  手机登录,登录快捷方便,不用记住密码,但是必须有手机在身边.  账号密码登录,需要记住密码,容易遗忘,可以和手 ...

  3. 智能管家App kotlin版(3)——用户注册/登录/忘记重置密码/个人数据编辑开发

    前言:Bmob后端云为我们用户操作带来了极大的便捷,本文章主要是涵盖了一个用户系统逻辑,实现用户的登录,注册,找回密码,修改密码,邮箱验证,以及记住密码等功能的实现,通过本章你可以学习到宝贵的用户操作 ...

  4. c#web窗体登录界面登录注册以及密码找回发送邮箱功能

    c#web窗体登录界面登录注册以及密码找回发送邮箱功能 效果图如下: 1.登录界面aspx代码 <%@ Page Language="C#" AutoEventWireup= ...

  5. Django用户认证管理系统(登录|注册|找回密码(邮箱找回)|注销)

    版本: 1. Python 3.6.2 2. Django 1.11.6 3. 虚拟环境 Virtualenv 网站提供登录.注册等用户认证功能是一个常见的需求.因此,Django 提供了一套功能完整 ...

  6. AndroidStudio实现简易android登录注册修改密码页面。

    利用sqlite实现简易登录注册以及修改密码功能. 页面设计 登录页面activity_login.xml <?xml version="1.0" encoding=&quo ...

  7. mysql setup choose_1.MySQL安装、启动、登录、重置密码、卸载

    安装 一.Choose Setup Type-- typical(默认) custom(用户自定义安装)-- 修改路径:MySQL Server(F:MySQL)和Server Data Files( ...

  8. java对mysql的简单操作的综合运用——登录+注册+修改密码

    本篇博客是java对mysql的简单操作的综合运用--登录系统.java对mysql的简单操作的综合运用--注册系统.java对mysql的简单操作的综合运用--修改密码系统的整合. 因为使用的是数据 ...

  9. mysql登录如何重置密码忘记_MySql登陆密码忘记了怎么办?MySQL重置root密码方法...

    MySQL有时候忘记了root密码是一件伤感的事.这里提供Windows 和 Linux 下的密码重置方法. Windows: 1.以系统管理员身份登陆系统. 2.打开cmd-----net star ...

  10. 交友项目【手机号登录注册功能】实现

    目录 1:用户登录 1.1:接口文档 1.2:API接口定义 1.3:Dubbo服务提供者 配置文件 启动引导类 数据访问层 API接口实现 1.4:Dubbo服务消费者 UserController ...

最新文章

  1. system.out.println从什么方向执行
  2. 按文件类型获取其图标
  3. element UI 制作模糊搜索框
  4. 动手学深度学习(PyTorch实现)(五)--多层感知机
  5. 反转map的key-value
  6. windows封装/备份恢复/双系统安装
  7. 图像语义分割 —利用Deeplab v3+训练VOC2012数据集
  8. 浅析 JNDI / DataSource / ConnectionPool 三者
  9. LuaStudio 9.27 去10分钟退出暗桩板
  10. vbox NAT 设置端口映射(NAT+8080端口转发)
  11. @Autwired自动注入XxxMapper接口原理(含mybstis-spring.jar源码)
  12. JSP学生日常记账系统综合课程设计报告
  13. 3. Carla导入openDRIVE地图
  14. Manjaro 安装 IC617
  15. dell服务器重装win10,戴尔dell重装win10系统后无法引导的解决方法(原创)
  16. Spinner的用法(转)
  17. 【安全】如何关闭Windows系统的137, 139, 445端口?
  18. Lake Counting
  19. 魅蓝metal刷android 6,魅蓝metal刷机包 Flyme 6.1.0.0Y稳定版 对系统稳定性和功耗表现进行了特定优化...
  20. 塞拉菲娜创始人 - 木子

热门文章

  1. Ethical.Hacking.2021.10:BUILDING TROJANS
  2. 第三方软件产品采购分享
  3. 图片太大怎么缩小mb?
  4. 重装Win10系统有教程吗?如何在线一键重装Win10系统?
  5. solidworks动画制作教程——装配体爆炸动画
  6. ForkJoinPool介绍
  7. Redis报错Java.net.UnknownHostException的解决办法
  8. 虚拟机CentOS启动报错-entering emergency mode解决办法
  9. Android逆向:去除RE管理器4.41及车来了广告
  10. CUDA 学习(CUDA实战 第四章)