2.简阅注册功能

1.下载redis准备

  • 运行redis-server:redis-server.exe redis.windows.conf
  • 再开一个命令行窗口,进入redis目录运行redis-cli.exe命令

2.注册阿里云服务(并申请一个模板和签名写程序有用,发送验证码要收钱往自己账户里充点钱)

3.添加依赖

<dependency>
    <groupId>com.aliyun</groupId>
    <artifactId>aliyun-java-sdk-core</artifactId>
    <version>4.0.3</version>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
  • 获取六位随机数验证码
public static String getVerifyCode(){
        Random random=new Random();
        StringBuilder stringBuilder=new StringBuilder();
        for(int i=0;i<6;i++){
            stringBuilder.append(String.valueOf(random.nextInt(10)));
        }
        return stringBuilder.toString();
    }
  • SMSUtil
package com.spring.jianyueapi.util;

import com.aliyuncs.CommonRequest;
import com.aliyuncs.CommonResponse;
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.http.MethodType;
import com.aliyuncs.profile.DefaultProfile;

public class SMSUtil {
    public static String send(String mobile){
        DefaultProfile profile=DefaultProfile.getProfile("cn-hangzhou","LTAIL4bn0wGEtnsG","KMwPoHxc95LnRAfmaIL6sAVJ4M9PGc");
        IAcsClient client=new DefaultAcsClient(profile);
        CommonRequest request=new CommonRequest();
        request.setMethod(MethodType.POST);
        request.setDomain("dysmsapi.aliyuncs.com");
        request.setVersion("2017-05-25");
        request.setAction("SendSms");
        request.putQueryParameter("RegionId", "cn-hangzhou");
        request.putQueryParameter("PhoneNumbers", mobile);
        request.putQueryParameter("SignName", "jianyuesms");
        request.putQueryParameter("TemplateCode", "SMS_162732247");
        String verifyCode = StringUtil.getVerifyCode();
        request.putQueryParameter("TemplateParam","{\"code\":"+verifyCode+"}");
        CommonResponse response= null;
        try {
            response = client.getCommonResponse(request);
            System.out.println(response.getData());
        } catch (ClientException e) {
            e.printStackTrace();
        }
        return verifyCode;
    }

}
  • Service接口增加注册方法
  void signUp(UserDTO userDTO);
  • signUp实现方法
 @Override
    public void signUp(UserDTO userDTO) {
        User user1=new User();
        user1.setMobile(userDTO.getMobile());
        user1.setPassword(StringUtil.getBase64Encoder(userDTO.getPassword()));
        user1.setNickname("新用户");
        user1.setAvatar("http://ppeto2k90.bkt.clouddn.com/avatar/default.png");
        user1.setRegtime(new Date());
        user1.setStatus((short)1);
        userMapper.insert(user1);
    }
  • 单元测试
  • 获取/验证验证码接口
  @PostMapping(value = "/verify")
    public ResponseResult getVerifyCode(@RequestParam("mobile") String mobile){
        User user=userService.getUserByMobile(mobile);
        if (user!=null){
            return ResponseResult.error(StatusConst.MOBILE_EXIST,MsgConst.MOBILE_EXIST);
        }else{
            //SMSUtil.send(mobile);
            String verifyCode= SMSUtil.send(mobile);
            System.out.println(verifyCode);
            redisService.set(mobile,verifyCode);
            return ResponseResult.success();
        }
    }

    @PostMapping(value = "/check")
    public ResponseResult checkVerifyCode(@RequestParam("mobile") String mobile,@RequestParam("verifyCode") String verifyCode){
        String code=redisService.get(mobile).toString();
        System.out.println(code+"---");
        System.out.println(verifyCode);
        if(code.equals(verifyCode)){
            return ResponseResult.success();
        }else {
            return ResponseResult.error(StatusConst.VERIFYCODE_ERROR,MsgConst.VERIFYCODE_ERROR);
        }
    }
  • 注册接口
  @PostMapping(value = "/sign_up")
    public ResponseResult signUp(@RequestBody UserDTO userDTO){
        userService.signUp(userDTO);
        return ResponseResult.success();
    }
  • 启动主类用Swagger测试

前端

  • 注册页面
<template>
    <view class="content">
        <view class="box"><input type="number" class="phone" v-model="mobile" placeholder="请输入手机号"  required="required"/></view>
        <view class="box"><input type="text" class="code" v-model="verifyCode" placeholder="请输入短信验证码" required="required" />
            <button class="accept" @tap="!safety.state ? getVerifyCode():''">{{!safety.state&&'获取'||(safety.time+' s')}}</button>
        </view>
        <button @tap="checkCode" class="register"><text class="rightnow">下一步</text></button>
    </view>
</template>

<script>
    export default {
        data() {
            return {
              mobile:'',
              verifyCode:'',
              safety:{
                  time:60,
                  state:false,
                  interval:''
              }
            };
        },
        onLoad() {

        },
        onShow() {

        },
        methods: {
             getVerifyCode:function(){
                 var _this=this;
                 uni.request({
                     url:this.apiServer+'/user/verify',
                     method:'POST',
                     header:{
                         'content-type':'application/x-www-form-urlencoded'
                     },
                     data:{
                         mobile:_this.mobile
                     },
                     success:res =>{
                         //成功后倒计时60s后可在点击
                         this.safety.state=true;
                         //倒计时
                         this.safety.interval=setInterval(() =>{
                             if(this.safety.time-- <=0){
                                 this.safety.time=60;
                                 this.safety.state=false;
                                 clearInterval(this.safety.interval);
                             }
                         },1000);
                         if(res.data.code===0){
                             uni.showToast({
                                 title:'验证码已发送'
                             });
                             _this.disabled=true;
                             console.log(_this.disabled);
                         }else{
                             uni.showModal({
                                 title:'提示',
                                 content:res.data.msg
                             });
                         }
                     }
                 })
             },
             checkCode:function(){
                 var _this=this;
                 console.log(_this.verifyCode);
                 uni.request({
                    url: this.apiServer + '/user/check',
                    method:'POST',
                    header:{
                     'content-type':'application/x-www-form-urlencoded'
                    },
                     data:{
                         mobile:_this.mobile,
                         verifyCode:_this.verifyCode
                     },
                     success: res =>{
                         console.log(res.data);
                         if(res.data.code===0){
                             uni.navigateTo({
                                 url:'../register_psd/register_psd?mobile='+_this.mobile
                             });
                         }else{
                             uni.showModal({
                                 title:'提示',
                                 content:res.data.msg
                             });
                         }
                     }
                 });
             }
        }
    };
</script>
<template>
    <view class="content">
        <view class="box"><input type="text" password class="password" v-model="password" placeholder="请输入密码" required="required"/></view>
    <navigator class="register" @tap="signUp(userDTO)"><button class="rightnow">立即注册</button></navigator>
    </view>
</template>

<script>
    export default {
        data() {
            return {
               mobile:'',
               password:''
            };
        },
        onLoad:function(option) {
            //option为object类型,会序列化上个页面传递的参数
             console.log(option.mobile);
             this.mobile=option.mobile;
        },
        onShow() {
    
        },
        methods: {
             signUp:function(userDTO){
                 var _this=this;
                 uni.request({
                     url:this.apiServer+'/user/sign_up',
                     method:'POST',
                     header:{'content-type': 'application/json'},
                     data:{
                         mobile:_this.mobile,
                         password:_this.password
                     },
                     success:res =>{
                         if(res.data.code===0){
                             uni.showModal({
                                 title:'提示',
                                 content:'注册成功'
                             })
                             uni.navigateTo({
                                 url:'../signin/signin'
                             });
                         }else{
                             uni.showModal({
                                 title:'提示',
                                 content:res.data.msg
                             });
                         }
                     }
                 });
             }
        }
    };
</script>
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,088评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,715评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,361评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,099评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 60,987评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,063评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,486评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,175评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,440评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,518评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,305评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,190评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,550评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,880评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,152评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,451评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,637评论 2 335

推荐阅读更多精彩内容

  • 注册流程分析 客户端先发送一个手机号码到后端获取验证码,此时“获取验证码”按钮是激活状态,“下一步”按钮是禁用状态...
    洋baby阅读 296评论 0 1
  • 注册流程分析 客户端先发送一个手机号码到后端获取验证码,此时“获取验证码”按钮是激活状态,“下一步”按钮是禁用状态...
    皮皮力_996a阅读 365评论 0 0
  • 1. 流程分析 客户端先发送一个手机号码到后端获取验证码,此时“获取验证码”按钮是激活状态,“下一步”按钮是禁用状...
    Rebirth_914阅读 1,136评论 0 9
  • 注册流程分析 客户端先发送一个手机号码到后端获取验证码,此时“获取验证码”按钮是激活状态,“下一步”按钮是禁用状态...
    六年的承诺阅读 496评论 0 1
  • 晚饭后,孩子还剩下读拼音的作业没有完成。他父亲坐在他边上,指导他读拼音,有些不耐烦了。我觉察到,其实孩子肯定也觉察...
    練心阅读 3,467评论 30 29