iT邦幫忙

2021 iThome 鐵人賽

DAY 14
0
Modern Web

用vue.js寫出一個實用的科內分享網站系列 第 14

Day14 vue.js註冊驗證帳號是否重複ep2

  • 分享至 

  • xImage
  •  

延續昨天
今天的目標是把註冊功能完善!
這是昨天的console.log
https://ithelp.ithome.com.tw/upload/images/20210926/20141007Bk3ygLsuEG.png

來試試看 把id(帳號)設成資料庫有的資料會發生什麼事
跑出error了
https://ithelp.ithome.com.tw/upload/images/20210926/20141007pXD3HEz241.png

所以我們不用特別下什麼條件判斷帳號是否重複 成功post上去就代表沒重複反之則有
那接下來的程式碼就可以這樣寫

 async signup(){
        let  result = await axios.post("http://localhost:3000/users",{
          id:this.useraccount,
          password:this.userpassword,
          email:this.useremail,
          username:this.username
         
        })
       
       console.warn(result);
        if(result.status==201){ 
              alert("註冊成功")
          sessionStorage.setItem("user-info",JSON.stringify(result.data))
          this.$router.push({name:'Home'})
         
        }
        else{
          alert('帳號不得重複')
        }
        
      }

至於為什麼這個session接的方式跟login不一樣
主要是看console.log一個是陣列形式的一個不是

我們通常都希望註冊完之後直接就可以登入 所以就把session給接上去 在順便push到首頁 來看看成果吧!
https://ithelp.ithome.com.tw/upload/images/20210926/20141007oqMgl8JJSc.pnghttps://ithelp.ithome.com.tw/upload/images/20210926/20141007qG7at7Fdb4.png

怕大家忘記 為什麼set完可以接到session
在navbar.vue 我們有設一個mounted

   async mounted(){
   
    let user=sessionStorage.getItem('user-info');
    this.username=JSON.parse(user).username
      this.user_id=JSON.parse(user).id
      if(user){
        this.login=false
      }
      
    },

所以照這個只要我們set session的key名字叫做user-info 在navbar裡面都會被接到 並且會被使用!
再來清除session 然後在測試看看帳號打一樣的會不會成功跳錯誤
https://ithelp.ithome.com.tw/upload/images/20210926/20141007SydyfYeskA.png

結果發現不會跑到 else 原因是 post 那邊就錯了 所以不會接者跑

最後將程式碼改成try catch
https://ithelp.ithome.com.tw/upload/images/20210926/20141007VeNjdCe33F.png

 async signup(){
       
  try {
          let result = await axios.post("http://localhost:3000/users",{
          id:this.useraccount,
          password:this.userpassword,
          email:this.useremail,
          username:this.username
         
          
        })
            if(result.status==201){ 
            alert("註冊成功")
          sessionStorage.setItem("user-info",JSON.stringify(result.data))
          this.$router.push({name:'Home'})
          window.location.reload()
        }
        
        } catch (error) {
           console.warn(error)
           alert('帳號不得重複')
        }
      
        
      
        
      }
    },

接下來有人會想說 密碼太短 或是email格式不對我不想讓別人註冊耶(由於現在沒下任何規則 就算是空值也會註冊成功)
我們可以這樣解決(vuetify的功能)

export default {
    
   data(){
      return{

        showPassword:false,
        useraccount:'',
        userpassword:'',
        username:'',
        useremail:'',
        inputrule:[
          x=>x.length>0 || "不得為空值"
        ],
      }
    },

在data裡面定義一個陣列 叫做inputrule 照這個形式 x的長度需大於0
再來去想要的欄位 下:rules=”inputrule”
https://ithelp.ithome.com.tw/upload/images/20210926/20141007fW3Tzi3fPg.png

就會得到這樣的畫面
https://ithelp.ithome.com.tw/upload/images/20210926/2014100775yhIeDLi1.png

但如果你填入不同的帳號依然會新增資料 這時候該怎麼辦呢??
只要在你的html tag 裡面下一個ref
https://ithelp.ithome.com.tw/upload/images/20210926/20141007fYfn9boGWX.png

然後在判斷這個ref是否validate就可以了(感恩vuetify讚嘆vuetify)
https://ithelp.ithome.com.tw/upload/images/20210926/20141007hpldH6Uyna.png

嘟嘟嚕這就是結果!
https://ithelp.ithome.com.tw/upload/images/20210926/20141007y3OrxfcQ0T.png

好了搞了2天終於把註冊頁給搞好了
明天就先從登出開始好了
我們明天見!


上一篇
Day13 vue.js實現簡單的註冊功能ep1
下一篇
Day15vue.js網站登出
系列文
用vue.js寫出一個實用的科內分享網站30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言