首頁 >web前端 >js教程 >Vue登入註冊的實作方法(程式碼解析)

Vue登入註冊的實作方法(程式碼解析)

不言
不言原創
2018-08-17 14:14:055199瀏覽

這篇文章帶給大家的內容是關於Vue登入註冊的實作方法(程式碼解析),有一定的參考價值,有需要的朋友可以參考一下,希望對你有幫助。

關於vue登入註冊,並保持登入狀態,是vue玩家必經之路,網路上也有很多的解決方法,但是有一些太過於複雜,新手可能會看的一臉懵逼,現在給大家介紹一種我自己寫專案在用而且不難理解的一種方法。

專案中有一些路由是需要登入才可以進入的,像是首頁,個人中心等等
有一些路由是不需要登入就可以進入,例如登入頁,註冊頁,忘記密碼等等
那如何判斷路由是否需要登入?就要在路由JS裡面做文章

在router.js中加入meta區分

例如登入註冊頁面,不需要登入即可進入,那麼我們把meta中的isLogin標誌設定為false

{
  //登录
  path: '/login',
  component: login,
  meta: {
    isLogin: false
  }
},
{
  //注册
  path: '/register',
  component: register,
  meta: {
    isLogin: false
  }
},

而在首頁我們需要登入才能進入,那麼我們把meta中的isLogin標誌設定為true

#
{
  //首页
  path: '/home',
  component: home,
  meta: {
    isLogin: true
  },
}

這樣我們就為進入各個路由是否需要登入做了區分。

接下來我們在login.vue中修改登入後狀態

我們使用axios向後台發起登入請求

this.$axios.post("/xxx/login", {user:name,password:pwd})
    .then(data => {
        //登录失败,先不讨论
        if (data.data.status != 200) {
          //iViewUi的友好提示
          this.$Message.error(data.data.message);
        //登录成功
        } else {
          //设置Vuex登录标志为true,默认userLogin为false
          this.$store.dispatch("userLogin", true);
          //Vuex在用户刷新的时候userLogin会回到默认值false,所以我们需要用到HTML5储存
          //我们设置一个名为Flag,值为isLogin的字段,作用是如果Flag有值且为isLogin的时候,证明用户已经登录了。
          localStorage.setItem("Flag", "isLogin");
          //iViewUi的友好提示
          this.$Message.success(data.data.message);
          //登录成功后跳转到指定页面
          this.$router.push("/home");
        }
 });

Vuex裡面我是這樣寫的(如果專案不需要Vuex,那麼直接使用HTML5儲存就可以了):

export const store = new Vuex.Store({
  // 设置属性
  state: {
    isLogin: false,
  },

  // 获取属性的状态
  getters: {
    //获取登录状态
    isLogin: state => state.isLogin,
  },

  // 设置属性状态
  mutations: {
    //保存登录状态
    userStatus(state, flag) {
      state.isLogin = flag
    },
  },

  // 应用mutations
  actions: {
    //获取登录状态
    setUser({commit}, flag) {
      commit("userStatus", flag)
    },
  }
})

重點來了~,在mian.js裡

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

  //获取用户登录成功后储存的登录标志
  let getFlag = localStorage.getItem("Flag");

  //如果登录标志存在且为isLogin,即用户已登录
  if(getFlag === "isLogin"){

    //设置vuex登录状态为已登录
    store.state.isLogin = true
    next()

    //如果已登录,还想想进入登录注册界面,则定向回首页
    if (!to.meta.isLogin) {
       //iViewUi友好提示
      iView.Message.error('请先退出登录')
      next({
        path: '/home'
      })
    }
  
  //如果登录标志不存在,即未登录
  }else{

    //用户想进入需要登录的页面,则定向回登录界面
    if(to.meta.isLogin){
      next({
        path: '/login',
      })
      //iViewUi友好提示
      iView.Message.info('请先登录')
    //用户进入无需登录的界面,则跳转继续
    }else{
      next()
    }

  }

});

router.afterEach(route => {
  window.scroll(0, 0);
});

這樣就已經完成了Vue的登入註冊,當使用者關閉瀏覽器或隔天再次進入網站,使用者依舊可以保持登入的狀態直到使用者手動登出登入。

Tips:使用者退出只需要localStorage.removeItem("Flag")即可

相關推薦:

Laravel實作使用者註冊和登錄,laravel實現用戶註冊_PHP教程

JS實作下拉選單登入註冊彈窗

以上是Vue登入註冊的實作方法(程式碼解析)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn