欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

vue+vuex+axios實現(xiàn)登錄、注冊頁權(quán)限攔截

 更新時間:2018年03月09日 09:38:15   作者:lx_1024  
下面小編就為大家分享一篇vue+vuex+axios實現(xiàn)登錄、注冊頁權(quán)限攔截,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

在GitHub上有很多寫好的模板,這個項目也是基于模板做的。

現(xiàn)在記錄一下我做的過程

1、修改config文件夾里的dev.env.js里的BASE_API,把地址改成請求后端的公共部分

BASE_API: '"http://192.168.xx.xx"', 

2、接下來就是操作src文件,先在 views里寫好vew組件(login.vue,regist.vue),寫好到router里的index.js里配置好路徑

login.vue

<template>
 <div class="login-container">
  <el-form autoComplete="on" :model="loginForm" :rules="loginRules" ref="loginForm" label-position="left"
     label-width="0px"
     class="card-box login-form">
   <h3 class="title">登錄</h3>
   <el-form-item prop="name">
  <span class="svg-container svg-container_login">
   <svg-icon icon-class="user"/>
  </span>
    <el-input name="name" disabled type="text" v-model="loginForm.name" autoComplete="on"
      placeholder="用戶名"/>
   </el-form-item>
   <el-form-item prop="password">
  <span class="svg-container">
   <svg-icon icon-class="password"></svg-icon>
  </span>
    <el-input name="password" :type="pwdType" @keyup.enter.native="handleLogin" v-model="loginForm.password"
      autoComplete="on"
      placeholder="密碼"></el-input>
    <span class="show-pwd" @click="showPwd"><svg-icon icon-class="eye"/></span>
   </el-form-item>
   <el-form-item>
    <el-button type="primary" style="width:100%;" :loading="loading" @click.native.prevent="handleLogin">
    登錄
    </el-button>
   </el-form-item>
  </el-form>
  </div>
</template>
<script>
 export default {
 name: 'login',
 data() {
  const validateUsername = (rule, value, callback) => {
  if (value.trim().length<1) {
   callback(new Error('用戶名不能為空'))
  } else {
   callback()
  }
  };
  const validatePass = (rule, value, callback) => {
  if (value.trim().length < 1) {
   callback(new Error('密碼不能為空'))
  } else {
   callback()
  }
  };
  return {
  loginForm: {
   name: '',
   password: ''
  },
  loginRules: {
   name: [{required: true, trigger: 'blur', validator: validateUsername}],
   password: [{required: true, trigger: 'blur', validator: validatePass}]
  },
  loading: false,
  pwdType: 'password'
  }
 },
 methods: {
  showPwd() {
  if (this.pwdType === 'password') {
   this.pwdType = ''
  } else {
   this.pwdType = 'password'
  }
  },
  handleLogin() {
  this.$refs.loginForm.validate(valid => {
   if (valid) {
   this.loading = true;
   this.$store.dispatch('Login', this.loginForm).then(() => {
    this.loading = false;
    this.$router.push({path: '/'});
   }).catch((e) => {
    this.loading = false
   })
   } else {
   console.log('error submit!!')
   return false
   }
  })
  }
 }
 }
</script>

router/index.js

{ path: '/login', component: _import('Login/login'), hidden: true } 

3、在api里的login.js里寫好與后端對接的接口地址,在stores里的modules里的user.js里定義user,有state,mutations,action,具體的請求操作寫在action里,login.vue或regist.vue調(diào)用user.js里寫好的請求,getter.js里定義store的getters

api/login.js

import request from '@/utils/request'
export function login(name,password) {
 return request({
 url: '/XX/XX',
 method: 'post',
 data: {
  name,
  password
 } 
 })
}

stores/modules/user.js

  import { login,regist,logout } from '@/api/login'
  import { getToken,setToken } from '@/utils/auth'
  const user = {
  state: {
   name:'',
   token:''
  },
  mutations: {
   SET_NAME: (state, name) => {
   state.name = name;
   },
   SET_TOKEN: (state, token) => {
   state.token = token;
   setToken(token);
   }
  },
  actions: {
   // 登錄
   Login({ commit }, userInfo) {
   const name = userInfo.name.trim();
   const password = userInfo.password.trim();
   return new Promise((resolve, reject) => {
    login(name, password).then(response => {
    const data = response.data;
    commit('SET_NAME', data.name);
    commit('SET_TOKEN', data.token);
    setName(data.name);
    setToken(data.token);
    resolve(response); }).catch(error => { reject(error) }) }) },
   // 注冊 
   Regist({ commit }, userInfo) { 
   const name= userInfo.name.trim(); 
   const password = userInfo.password.trim(); 
   return new Promise((resolve, reject) => { 
    regist(name, password).then(response => { 
    const data = response.data; 
    commit('SET_NAME', data.name); 
    commit('SET_TOKEN', data.token);
    setName(data.name);setToken(data.token); 
    resolve(response);
    }).catch(error => { 
    reject(error) }) }) }, 
   // 登出 
   LogOut({ commit, state }) {
   return new Promise((resolve, reject) => {
   logout().then(response => {
    commit('SET_NAME', '');
    commit('SET_TOKEN', '');
    setName('');
    setToken(false);
    //removeName();
    //removeToken();
    resolve(response);
   }).catch(error => {
    reject(error)
   })
   })
  }, 
   // 前端 登出 
   FedLogOut({ commit }) { 
   return new Promise(resolve => {
  setToken(false);
 commit('SET_TOKEN', false);
 resolve()
   })
   }
  }
  }
  export default user

getter.js:

const getters={
 name:state=>state.user.name,
 token:state=>state.user.token
}
export default getter

4、在utils里的auth.js里對cookies進行操作,寫入,讀取,刪除用戶權(quán)限,是否登錄的標(biāo)志等

import Cookies from 'js-cookies'
export function setName(name) {
 return Cookies.set("name", name);
}
export function getName() {
 return Cookies.get("name");
}
export function setToken(token) {
 return Cookies.set("token", token);
}
export function getToken() {
 return Cookies.get("token");
}

5、在permission.js里寫白名單,對白名單以外的跳轉(zhuǎn)進行攔截然后跳轉(zhuǎn)登錄,同時判斷用戶權(quán)限,是否登錄,等

import router from './router'
import store from './store'
import NProgress from 'nprogress' // Progress 進度條
import 'nprogress/nprogress.css'// Progress 進度條樣式
import {Message} from 'element-ui'
import {getName, getToken} from "@/utils/auth"; // 驗權(quán)
const whiteList = ['/login', '/regist']; // 不重定向白名單
router.beforeEach((to, from, next) => {
 NProgress.start();
 if (whiteList.indexOf(to.path) !== -1) {
 next();
 } else {
 if (getToken()==="true") {
  next();
  NProgress.done()
 } else {
  next({path: '/login'});
  NProgress.done()
 }
 }
})
router.afterEach(() => {
 NProgress.done() // 結(jié)束Progress
})

6、utils里的request.js里寫攔截碼,對后端返回的特定碼進行攔截然后做相應(yīng)的操作

import axios from 'axios'
import { Message, MessageBox } from 'element-ui'
import store from '../store'
// 創(chuàng)建axios實例
const service = axios.create({
 baseURL: process.env.BASE_API, // api的base_url
 timeout: 15000     // 請求超時時間
});
// respone攔截器
service.interceptors.response.use(
 response => {
 /**
 * code為非200是拋錯 可結(jié)合自己業(yè)務(wù)進行修改
 */
 const res = response.data;
 //const res = response;
 if (res.code !== '200' && res.code !== 200) {
  if (res.code === '4001' || res.code === 4001) {
  MessageBox.confirm('用戶名或密碼錯誤,請重新登錄', '重新登錄', {
   confirmButtonText: '重新登錄',
   cancelButtonText: '取消',
   type: 'warning'
  }).then(() => {
   store.dispatch('FedLogOut').then(() => {
    location.reload()// 為了重新實例化vue-router對象 避免bug
   })
  })
  }
  if (res.code === '4009' || res.code === 4009) {
  MessageBox.confirm('該用戶名已存在,請重新注冊!', '重新注冊', {
   confirmButtonText: '重新注冊',
   cancelButtonText: '取消',
   type: 'warning'
  }).then(() => {
   store.dispatch('FedLogOut').then(() => {
   location.reload()// 為了重新實例化vue-router對象 避免bug
   })
  })
  }
  return Promise.reject('error')
 } else {
  return response.data
 }
 },
 error => {
 Message({
  message: error.message,
  type: 'error',
  duration: 5 * 1000
 });
 return Promise.reject(error)
 }
)
export default service

以上就是登錄注冊的核心部分,寫的不對的地方請指教

這篇vue+vuex+axios實現(xiàn)登錄、注冊頁權(quán)限攔截就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • vue父子模板傳值問題解決方法案例分析

    vue父子模板傳值問題解決方法案例分析

    這篇文章主要介紹了vue父子模板傳值問題解決方法,結(jié)合案例形式分析了vue.js父子模板傳值問題相關(guān)實現(xiàn)方法與具體操作步驟,需要的朋友可以參考下
    2020-02-02
  • Vue自定義指令結(jié)合阿里云OSS優(yōu)化圖片的實現(xiàn)方法

    Vue自定義指令結(jié)合阿里云OSS優(yōu)化圖片的實現(xiàn)方法

    這篇文章主要介紹了Vue自定義指令結(jié)合阿里云OSS優(yōu)化圖片的實現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-11-11
  • Vue的props父傳子的示例代碼

    Vue的props父傳子的示例代碼

    這篇文章主要介紹了Vue的props父傳子的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-05-05
  • vue實現(xiàn)微信瀏覽器左上角返回按鈕攔截功能

    vue實現(xiàn)微信瀏覽器左上角返回按鈕攔截功能

    這篇文章主要介紹了vue實現(xiàn)微信瀏覽器左上角返回按鈕攔截功能,本文通過實例代碼相結(jié)合的形式給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-01-01
  • vue.js將unix時間戳轉(zhuǎn)換為自定義時間格式

    vue.js將unix時間戳轉(zhuǎn)換為自定義時間格式

    這篇文章主要介紹了vue.js將unix時間戳轉(zhuǎn)換為自定義時間格式的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-01-01
  • vue-quill-editor插入圖片路徑太長問題解決方法

    vue-quill-editor插入圖片路徑太長問題解決方法

    這篇文章主要介紹了vue-quill-editor插入圖片路徑太長問題解決方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • Vue3源碼分析組件掛載創(chuàng)建虛擬節(jié)點

    Vue3源碼分析組件掛載創(chuàng)建虛擬節(jié)點

    這篇文章主要為大家介紹了Vue3源碼分析組件掛載創(chuàng)建虛擬節(jié)點,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-10-10
  • 關(guān)于vue-color-顏色選擇器插件

    關(guān)于vue-color-顏色選擇器插件

    這篇文章主要介紹了關(guān)于vue-color-顏色選擇器插件,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-09-09
  • vue3中實現(xiàn)拖拽排序代碼示例(vue-draggable-next的使用)

    vue3中實現(xiàn)拖拽排序代碼示例(vue-draggable-next的使用)

    在Vue3中使用拖拽功能時應(yīng)選用vue-draggable-next插件,傳統(tǒng)的draggable插件不兼容Vue3,可能導(dǎo)致TypeError錯誤,安裝后,需在項目中引入并使用,具體步驟包括安裝插件、引入使用、查看效果和相關(guān)說明,需要的朋友可以參考下
    2024-09-09
  • Vue 3.0x中的Suspense和異步組件詳解

    Vue 3.0x中的Suspense和異步組件詳解

    這篇文章主要介紹了Vue 3.0x中的Suspense和異步組件,我們將討論新的defineAsyncComponent函數(shù),以及如何利用Suspense組件來更好地處理異步組件的加載和顯示,需要的朋友可以參考下
    2023-08-08

最新評論