vueプロジェクトがログインを実現し、トークンを運ぶ

1.ユーザーは初めてログインし、バックエンドログインインターフェイスを呼び出し、ユーザー名とパスワードを送信します

2.バックエンドはユーザー名とパスワードが正しいことを確認し、成功するとトークンを返します。

3.フロントエンドはトークンを取得し、トークンをlocalStorge()とvuexに格納し、ホームページにジャンプします

4.フロントエンドがルートをジャンプするたびに、localStorgeにトークンがあるかどうかを判断し、ない場合は、ログインページにジャンプします

5.バックエンドを呼び出すたびに、リクエストヘッダーにトークンを追加する必要があります

6.バックエンドは、トークンがあるかどうかを判断します。トークンがある場合は、トークンを検証します。検証が成功した場合、データが返されます。検証が失敗した場合、トークンは期限切れになります。

7.フロントエンドの場合、401を取得し、トークンをクリアして、ログインページにジャンプします。

<テンプレート>

  <div>

    <input type = "text" v-model = "loginForm.username" placeholder = "用户名" />

    <input type = "text" v-model = "loginForm.password" placeholder = "密码" />

    <button @ click = "login">登录</ button>

  </ div>

</テンプレート>

         

デフォルトのエクスポート{

  データ(){

    返す{

      loginForm:{

        ユーザー名: ''、

        パスワード: ''}

    };

  }、

  メソッド:{

    ... mapMutations(['changeLogin'])、

    ログインする () {

      let _this = this;                  

   /////アカウントのパスワードが入力されているかどうかを判断します。入力されていない場合、アラートが出ます

      if(this.loginForm.username === '' || this.loginForm.password === ''){             

        警告(「アカウントまたはパスワードは空にできません」);

      } そうしないと {

        this.axios({

          メソッド: 'post'、

          url: '/ user / login'、

          データ:_this.loginForm

        })。then(res => {

          console.log(res.data);

          _this.userToken = 'Bearer' + res.data.data.body.token;

          //ユーザートークンをvuexに保存します_this.changeLogin({Authorization:_this.userToken});

          _this。$ router.push( '/ home');

          警告(「ログイン成功」);

        })。catch(error => {

          警告(「アカウントまたはパスワードが間違っています」);

          console.log(error);

        });

      }

    }

  }

};

 


store vue」
からstore import 文V下的index.jsのトークンインポートVueの追加'vuex' 
からVuexをインポートします。

Vue.use(Vuex); 

const store = new Vuex.Store({ 

  state:{ 

    // 存储トークン

    Authorization:localStorage.getItem( 'Authorization')?localStorage.getItem( 'Authorization'): '' 

  }、

  mutations:{ 

    // 修改token、そして将トークン存入localStorage 

    changeLogin(state、user){ 

      state.Authorization = user.Authorization; 

      localStorage.setItem( 'Authorization' 、user.Authorization);



デフォルトのストアを
エクスポートします
設定ルートナビゲーションガード

index.jsフォルダルータ



のVueからのインポート「VUE」

ルータからのインポート "VUE-ルータの; 

からインポートログイン「@ /コンポーネント/ログイン」; 

ホームからインポート「@ /コンポーネント/ホーム」; 

Vue.use(Router); 

const router = new Router({ 

  routes:[ 

    { 

      path: '/' 

      redirect: '/ login' 

    }、

    { 

      path: '/ login' 

      name: 'login' 

      component:login 

    } 、

    {

      path: '/ home' 

      name: 'home' 

      component:home 

    } 

  ] 

}); 

// ナビゲーションガード

/// router.beforeEachを使用してグローバルフロントガードを登録し、ユーザーが

router.beforeEach((to、from 、next) => { 

  if(to.path === '/ login' ){ 

    next(); 

  } else { 

    let token = localStorage.getItem( 'Authorization' ); 

    if(token === 'null' ||トークン=== '' ){ 

      next( '/ login' ); 

    } else { 

      next();

    }

  } 

}); 
デフォルトルーターを
エクスポートします
リクエストヘッダーとトークンの追加



//メインリクエストインターセプター、トークンの追加

axios.interceptors.request.use(

  config => { 

    if(localStorage.getItem( 'Authorization' )){ 

      config.headers .Authorization = localStorage.getItem( 'Authorization' ); 

    } 

    return config; 

  }、

  error => { 

    return Promise.reject(error); 

  });
フロントエンドがステータスコード401を取得した場合、トークン情報をクリアして、ログインページ

localStorage.removeItem( 'Authorization' ); 

 this。$ Router.push( '/ login' ); 


link:https:// www.jianshuにジャンプします。.com / p / 32e6eb23147f

 

おすすめ

転載: www.cnblogs.com/huanhuan55/p/12733386.html