Vue.js 가 SPA 로그 인 페이지 를 실현 하 는 과정[추천]

8593 단어 vue로그 인
기술 창고
  • vue.js 메 인 프레임 워 크
  • vuex 상태 관리
  • vue-router 경로 관리
  • 일반 과정
    일반적인 로그 인 과정 에서 전단 방안 은:
  • 상태 검사:페이지 에 들 어 갈 때 나 경로 가 변 할 때 로그 인 상태 가 있 는 지 확인 합 니 다(쿠키 나 로 컬 에 저 장 된 값).
  • 로그 인 상태 가 있 으 면 로그 인 정보(uid,프로필 사진 등...)를 조회 하여 저장 합 니 다.없 으 면 로그 인 페이지 로 이동 하기;
  • 로그 인 페이지(또는 로그 인 상자)에서 사용자 가 정 보 를 입력 하 는 것 이 합 법 적 인지 확인 합 니 다.
  • 교 검 통과 후 로그 인 요청 발송;검사 에 성공 하지 못 하면 사용자 에 게 피드백 합 니 다.
  • 로그 인 에 성공 하면 백 엔 드 데이터 에서 session 정 보 를 꺼 내 로그 인 상 태 를 저장 합 니 다(점프 가 필요 할 수 있 습 니 다).로그 인 에 성공 하지 못 하면 사용자 가 성공 하지 못 했 음 을 알려 줍 니 다.
  • 사용자 가 로그아웃 작업 을 할 때 로그 인 상 태 를 삭제 합 니 다.
  • 다음은 제 가 열거 한 절차 에 따라 코드 를 어떻게 실현 하 는 지 일일이 분석 하 겠 습 니 다.모든 코드 는https://github.com/doterlin/vue-example-login에 있 고 상세 한 주석 을 가지 고 코드 를 이해 하 는 데 도움 을 줍 니 다.
    그 전에 로그 인 페이지 의 경로 가/login 이 라 고 가정 하고 로그 인 후의 경 로 는/user 입 니 다.info。이렇게 하면 App.vue 에 router-view 를 놓 아서 이 두 가지 경 로 를 저장 하고 렌 더 링 할 수 있 습 니 다.
    
    // component/App.vue
    <template>
    <div class="container" id="app">
     <transition name="fade">
     <keep-alive>
      <router-view></router-view>
     </keep-alive>
     </transition>
    </div>
    </template>
    ...
    vue-router 설정 을 잘 합 니 다:
    
    // js/app.js
    import Vue from 'vue'
    import VueRouter from 'vue-router'
    import Login from '../component/Login.vue'
    import UserInfo from '../component/UserInfo.vue'
    Vue.use(VueRouter);
    const router = new VueRouter({
     routes: [{
     path: '/login',
     component: Login
     }, {
     path: '/user_info',
     component: UserInfo
     }]
    })
    ...
    상태 와 점프 검사
    두 시간 동안 우 리 는 상 태 를 검사 해 야 한다.1.사용자 가 페이지 를 열 때;2.경로 가 변 할 때;
    우선 로그 인 상 태 를 확인 하 는 방법 checkLogin 을 작성 해 야 합 니 다.
    
    // js/app.js
    ...
    var app = new Vue({
     data: {},
     el: '#app',
     render: h => h(App),
     router,
     store,
     methods:{
     checkLogin(){
      //      session
      //cookie                  
      if(!this.getCookie('session')){
      //               
      this.$router.push('/login');
      }else{
      //           
      this.$router.push('/user_info');
      }
     }
     }
    })
    
    
    사용자 체험 을 향상 시 키 기 위해 서 는 사용자 가 페이지 를 열 때 전단 에 로그 인 했 는 지 확인 해 야 합 니 다.사용자 가 다시 로그 인 할 필요 가 없습니다.이 실현 은 매우 간단 합 니 다.우 리 는 vue 인 스 턴 스 의 created 갈고리 에 썼 습 니 다.
    
    // js/app.js
    ...
    var app = new Vue({
     ...
     created() {
     this.checkLogin();
     },
     methods:{
     checkLogin(){
      ...
     }
     }
    })
    
    
    또한 경로 가 바 뀌 었 을 때 도 로그 인 을 확인 해 야 합 니 다.다음 상황(경로 변화)에서 로그 인 상 태 를 검사 하지 않 으 면 오류 가 발생 할 수 있 습 니 다.
  • 사용자 가 페이지 에 들 어 갈 때 로그 인 상태 가 있 지만 작업 을 할 때 마침 로그 인 기한 이 지 났 습 니 다.
  • 사용 자 는 쿠키/로 컬 storage 를 수 동 으로 삭제 하고 조작 합 니 다.
  • 사용자 가 로그 인 하지 않 은 상태 에서 수 동 으로 입력(또는 즐겨 찾기 에서 들 어 오기)로그 인 할 경로
  • 사용자 가 로그 인 한 상태 에서 로그 인 페이지 에 들 어 가 는 경로
  • 이것 은 우리 가 도청 하 는 이유 가 될 수 있 습 니 다.이 를 실현 하면 vue 의 watch 기능 을 이용 할 수 있 습 니 다.
    
    // js/app.js
    ...
    var app = new Vue({
     ...
     //        
     watch:{
     "$route" : 'checkLogin'
     },
    
     //     
     created() {
     this.checkLogin();
     },
    
     methods:{
     checkLogin(){
      ...
     }
     }
    })
    
    이로써 우 리 는 일반적인 과정의 첫 단 계 를 마 쳤 다.다음은 사용자 의 개인 정 보 를 어떻게 얻 는 지 실현 한다.
    사용자 정보 가 져 오기
    로그 인 에 성공 한 후에 저 희 는 보통 백 엔 드 에서 사용자 의 정 보 를 표시 해 야 합 니 다.예 를 들 어 닉네임,프로필 사진,등급 등 입 니 다.가 져 오 면 간단 합 니 다.http 요청 을 보 내 백 엔 드 에서 가 져 오 십시오.그러나 일반적으로 이러한 정 보 는 여러 경로 에서 사 용 됩 니 다(예 를 들 어 uid 는 각 백 엔 드 인터페이스 에서 매개 변수 로 사용 해 야 합 니 다).따라서 전체 상태 에 저장 해 야 합 니 다(vuex).
    
    // component/App.vue
    ...
    <script>
    export default {
     ...
     mounted(){
     //             
     this.getUserInfo();
     },
     methods: {
     //         
     getUserInfo(){
      this.userInfo = {
      nick: 'Doterlin',
      ulevel: 20,
      uid: '10000',
      portrait: 'images/profile.png'
      }
    
      //      
      ts.$http.get(url, {
      //  
      "params": this.userInfo
      }).then((response) => {
      //Success
      if(response.data.code == 0){
       this.$store.commit('updateUserInfo', this.userInfo); 
      }
      }, (response) => {
      //Error
      });
    
     }
     }
    }
    </script>
    ...
    
    
    물론 우 리 는 이전에 설정 해 야 합 니 다.예 를 들 어 app.js 에 쓰 거나 store.js 로 단독으로 쓰 고 app.js 에 도입(추천)해 야 합 니 다.
    
    // js/app.js
    // Vuex  
    ...
    const store = new Vuex.Store({
     state: {
     domain:'http://test.example.com', //         ,     (              )
     userInfo: { //      
      nick: null,
      ulevel: null,
      uid: null,
      portrait: null
     }
     },
     mutations: {
     //      
     updateUserInfo(state, newUserInfo) {
      state.userInfo = newUserInfo;
     }
     }
    })
    ...
    
    
    로그 인 요청 을 입력 하고 보 내기
    예상 치 못 한 문자 와 잦 은 요청 이 백 엔 드 로 전달 되 는 것 을 방지 하기 위해 서 는 전단 에서 사용자 의 입력 을 검사 하고 중복 요청 을 방지 해 야 합 니 다.물론 서로 다른 사이트 의 합 법 적 인 문자 가 다 릅 니 다.여 기 는 비어 있 을 때 만 합 법 적 이지 않 은 검사 입 니 다.
    
    //component/Login.vue
    <template>
    <div class="login" id="login">
     ...
     <div class="log-email">
      <input type="text" placeholder="Email" :class="'log-input' + (account==''?' log-input-empty':'')" v-model="account"><input type="password" placeholder="Password" :class="'log-input' + (password==''?' log-input-empty':'')" v-model="password">
      <a href="javascript:;" rel="external nofollow" class="log-btn" @click="login">Login</a>
     </div>
     ...
    </div>
    </template>
    <script>
    import Loading from './Loading.vue'
    export default {
     name: 'Login',
     data(){
      return {
       isLoging: false,
       account: '',
       password: ''
      }
     },
     components:{
     Loading
     },
     methods:{
    
      //    
      login(){
       if(this.account!='' && this.password!=''){
        this.toLogin();
       }
      }
    }
    </script>
    ...
    
    
    여기 this.toLogin 은 로그 인 요청 방법 입 니 다.post 비밀 번 호 를 백 엔 드 에 직접 보 내지 않 고 백 엔 드 에서 정 한 규칙 에 따라 암호 화 한 후에 보 냅 니 다.예 를 들 어 해시 알고리즘,예 를 들 어 이중 해시 암호 화 를 실 시 했 습 니 다.js/sha1.min.js 를 참조 하여 대체적으로 다음 과 같 습 니 다.
    
    ...
      //    
      toLogin(){
    
       //               
       //            ./js/sha1.min.js
       let password_sha = hex_sha1(hex_sha1( this.password ));
    
       //            
       let loginParam = {
        account: this.account,
        password_sha
       }
    
       //       
       this.isLoging = true;
    
       //    
       this.$http.post( 'example.com/login.php', {
       param: loginParam).then((response) => {
       if(response.data.code == 1){
        //                   
        let expireDays = 1000 * 60 * 60 * 24 * 15;
        this.setCookie('session', response.data.session, expireDays);
        //  
        this.$router.push('/user_info'); 
       }
       }, (response) => {
       //Error
       });
    ...
    
    
    이렇게 해서 3,4,5 단계 가 완성 되 었 다.마지막 단 계 는 로그아웃 이다.
    말소 하 다
    로그아웃 할 때 요청 이 필요 한 백 엔 드 가 있 습 니 다.중요 한 것 은 저 장 된 로그 인 상 태 를 삭제 하 는 것 입 니 다.
    
    // component/UserInfo.vue
    ...
     logout(){
      //  cookie      
      this.isLogouting = true;
      //    ,  logout.php
      // this.$http.post('eaxmple.com/logout.php')...
      //     cookie
      this.delCookie('session');
    
      //  loding  
      this.isLogouting = false;
    
      //      
      this.$router.push('/login/');
     }
    ...
    
    
    이상 은 본 고의 모든 내용 입 니 다.본 고의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 도움 이 되 기 를 바 랍 니 다.또한 저 희 를 많이 지지 해 주시 기 바 랍 니 다!

    좋은 웹페이지 즐겨찾기