2.簡閱注冊(cè)功能

1.下載redis準(zhǔn)備

  • 運(yùn)行redis-server:redis-server.exe redis.windows.conf
  • 再開一個(gè)命令行窗口导犹,進(jìn)入redis目錄運(yùn)行redis-cli.exe命令

2.注冊(cè)阿里云服務(wù)(并申請(qǐng)一個(gè)模板和簽名寫程序有用歹篓,發(fā)送驗(yàn)證碼要收錢往自己賬戶里充點(diǎn)錢)

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>
  • 獲取六位隨機(jī)數(shù)驗(yàn)證碼
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接口增加注冊(cè)方法
  void signUp(UserDTO userDTO);
  • signUp實(shí)現(xiàn)方法
 @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);
    }
  • 單元測試
  • 獲取/驗(yàn)證驗(yàn)證碼接口
  @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);
        }
    }
  • 注冊(cè)接口
  @PostMapping(value = "/sign_up")
    public ResponseResult signUp(@RequestBody UserDTO userDTO){
        userService.signUp(userDTO);
        return ResponseResult.success();
    }
  • 啟動(dòng)主類用Swagger測試

前端

  • 注冊(cè)頁面
<template>
    <view class="content">
        <view class="box"><input type="number" class="phone" v-model="mobile" placeholder="請(qǐng)輸入手機(jī)號(hào)"  required="required"/></view>
        <view class="box"><input type="text" class="code" v-model="verifyCode" placeholder="請(qǐng)輸入短信驗(yàn)證碼" 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 =>{
                         //成功后倒計(jì)時(shí)60s后可在點(diǎn)擊
                         this.safety.state=true;
                         //倒計(jì)時(shí)
                         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:'驗(yàn)證碼已發(fā)送'
                             });
                             _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="請(qǐng)輸入密碼" required="required"/></view>
    <navigator class="register" @tap="signUp(userDTO)"><button class="rightnow">立即注冊(cè)</button></navigator>
    </view>
</template>

<script>
    export default {
        data() {
            return {
               mobile:'',
               password:''
            };
        },
        onLoad:function(option) {
            //option為object類型,會(huì)序列化上個(gè)頁面?zhèn)鬟f的參數(shù)
             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:'注冊(cè)成功'
                             })
                             uni.navigateTo({
                                 url:'../signin/signin'
                             });
                         }else{
                             uni.showModal({
                                 title:'提示',
                                 content:res.data.msg
                             });
                         }
                     }
                 });
             }
        }
    };
</script>
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末起胰,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子驾中,更是在濱河造成了極大的恐慌践瓷,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,865評(píng)論 6 518
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件爷辱,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)饭弓,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,296評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門双饥,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人弟断,你說我怎么就攤上這事咏花。” “怎么了夫嗓?”我有些...
    開封第一講書人閱讀 169,631評(píng)論 0 364
  • 文/不壞的土叔 我叫張陵迟螺,是天一觀的道長冲秽。 經(jīng)常有香客問我舍咖,道長,這世上最難降的妖魔是什么锉桑? 我笑而不...
    開封第一講書人閱讀 60,199評(píng)論 1 300
  • 正文 為了忘掉前任排霉,我火速辦了婚禮,結(jié)果婚禮上民轴,老公的妹妹穿的比我還像新娘攻柠。我一直安慰自己,他們只是感情好后裸,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,196評(píng)論 6 398
  • 文/花漫 我一把揭開白布瑰钮。 她就那樣靜靜地躺著,像睡著了一般微驶。 火紅的嫁衣襯著肌膚如雪浪谴。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,793評(píng)論 1 314
  • 那天因苹,我揣著相機(jī)與錄音,去河邊找鬼。 笑死媒咳,一個(gè)胖子當(dāng)著我的面吹牛瓦糕,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播款筑,決...
    沈念sama閱讀 41,221評(píng)論 3 423
  • 文/蒼蘭香墨 我猛地睜開眼智蝠,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了奈梳?” 一聲冷哼從身側(cè)響起杈湾,我...
    開封第一講書人閱讀 40,174評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎颈嚼,沒想到半個(gè)月后毛秘,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,699評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,770評(píng)論 3 343
  • 正文 我和宋清朗相戀三年叫挟,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了艰匙。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,918評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡抹恳,死狀恐怖员凝,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情奋献,我是刑警寧澤健霹,帶...
    沈念sama閱讀 36,573評(píng)論 5 351
  • 正文 年R本政府宣布,位于F島的核電站瓶蚂,受9級(jí)特大地震影響糖埋,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜窃这,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,255評(píng)論 3 336
  • 文/蒙蒙 一瞳别、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧杭攻,春花似錦祟敛、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,749評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至锅睛,卻和暖如春埠巨,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背衣撬。 一陣腳步聲響...
    開封第一講書人閱讀 33,862評(píng)論 1 274
  • 我被黑心中介騙來泰國打工乖订, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人具练。 一個(gè)月前我還...
    沈念sama閱讀 49,364評(píng)論 3 379
  • 正文 我出身青樓乍构,卻偏偏與公主長得像,于是被迫代替她去往敵國和親扛点。 傳聞我的和親對(duì)象是個(gè)殘疾皇子哥遮,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,926評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容

  • 注冊(cè)流程分析 客戶端先發(fā)送一個(gè)手機(jī)號(hào)碼到后端獲取驗(yàn)證碼,此時(shí)“獲取驗(yàn)證碼”按鈕是激活狀態(tài)陵究,“下一步”按鈕是禁用狀態(tài)...
    洋baby閱讀 299評(píng)論 0 1
  • 注冊(cè)流程分析 客戶端先發(fā)送一個(gè)手機(jī)號(hào)碼到后端獲取驗(yàn)證碼眠饮,此時(shí)“獲取驗(yàn)證碼”按鈕是激活狀態(tài),“下一步”按鈕是禁用狀態(tài)...
    皮皮力_996a閱讀 381評(píng)論 0 0
  • 1. 流程分析 客戶端先發(fā)送一個(gè)手機(jī)號(hào)碼到后端獲取驗(yàn)證碼铜邮,此時(shí)“獲取驗(yàn)證碼”按鈕是激活狀態(tài)仪召,“下一步”按鈕是禁用狀...
    Rebirth_914閱讀 1,167評(píng)論 0 9
  • 注冊(cè)流程分析 客戶端先發(fā)送一個(gè)手機(jī)號(hào)碼到后端獲取驗(yàn)證碼寨蹋,此時(shí)“獲取驗(yàn)證碼”按鈕是激活狀態(tài),“下一步”按鈕是禁用狀態(tài)...
    六年的承諾閱讀 496評(píng)論 0 1
  • 晚飯后扔茅,孩子還剩下讀拼音的作業(yè)沒有完成已旧。他父親坐在他邊上,指導(dǎo)他讀拼音召娜,有些不耐煩了运褪。我覺察到,其實(shí)孩子肯定也覺察...
    練心閱讀 3,532評(píng)論 30 29