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>
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

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