首頁 >web前端 >uni-app >淺析uniapp初始化未登入跳轉的實作方法

淺析uniapp初始化未登入跳轉的實作方法

PHPz
PHPz原創
2023-04-06 14:37:152663瀏覽

在使用UniApp進行開發時,我們可能會遇到需要使用者登入才能進入的頁面,例如購物車、訂單頁面等。那麼,如何實現未登入時自動跳到登入頁面呢?本文將為您詳細介紹UniApp初始化未登入跳轉的實作方法。

一、需求分析

在應用程式中新增登入功能,並實現在未登入狀態下,進入相關頁面時跳到登入頁面。

二、實作想法

1.在App.vue檔案中寫入登入的相關邏輯程式碼。
2.使用路由攔截器,實現在進入需要登入的頁面時,檢查使用者是否已登錄,若未登入則會自動跳到登入頁面。
3.使用Vuex管理使用者訊息,實現登入狀態的儲存和使用者資訊的傳遞。

三、程式碼實作

1.在App.vue中加入登入邏輯

我們可以在App.vue中的created生命週期函數中執行登入驗證的邏輯。例如:

created(){
    // 检查用户是否已登录
    let loginInfo = uni.getStorageSync('loginInfo') || null;
    if(loginInfo){
        this.$store.commit('saveUserInfo', loginInfo);
    }else{
        uni.navigateTo({
            url: '/pages/login/login'
        });
    }
}

在此處,我們透過uni.getStorageSync()方法來取得本機儲存的登入資訊。如果登入資訊存在,則將使用者資訊傳遞至Vuex狀態管理員中;否則,跳到登入頁面。

2.實作路由攔截器

一般情況下,都是在路由跳轉前進行登入狀態檢查。我們可以定義一個路由攔截器,在跳轉至需要登入的頁面前執行相關操作。

在main.js中引入路由:

import router from './router';

並添加路由攔截器:

router.beforeEach((to, from, next) => {
    // 进入需要登录的页面前先进行登录状态检查
    let isLogin = store.getters.getLoginStatus;
    if (to.meta.requireAuth) { 
        // 如果未登录,则跳转至登录页面
        if(!isLogin){
            next({
                path: '/login',
                query: { redirect: to.fullPath }
            });
        }else{
            next();
        }
    }else{
        next();
    }
});

在此處,我們根據路由中是否標明requireAuth字段,判斷該頁面是否要求登入。如需登錄,則檢查目前使用者是否已登錄,若未登入則跳轉至登入頁面;否則允許繼續造訪。如不需要登錄,則直接跳轉。

3.實現使用者資訊儲存和傳遞

在Vuex狀態管理器中建立一個名為userInfo的模組,用於管理使用者資訊。我們可以在其中定義一些與使用者相關的getter、mutation和action。

在userInfo.js檔案中,定義以下程式碼:

const state = {
    userInfo: null
}

const getters = {
    getUserInfo: state => state.userInfo,
    getLoginStatus: state => state.userInfo != null
}

const mutations = {
    saveUserInfo (state, userInfo) {
        state.userInfo = userInfo;
        uni.setStorageSync('loginInfo', userInfo);
    },
    logout(state){
        state.userInfo = null;
        uni.removeStorageSync('loginInfo');
    }
}

const actions = {
    login({ commit }, userInfo) {
        // 登录操作
        commit('saveUserInfo', userInfo);
    },
    logout({ commit }){
        // 登出操作
        commit('logout');
    }
}

export default {
    state,
    getters,
    mutations,
    actions
}

在此處,我們定義了getUserInfo、getLoginStatus、saveUserInfo、logout和login等函數,用於取得、儲存、清除使用者訊息,以及模擬登入、登出操作。其中,saveUserInfo方法在儲存使用者資訊時,除了將使用者資訊傳遞至state中,還進行了本地存儲,方便持久化保存。

四、總結

透過使用UniApp提供的路由攔截器和Vuex狀態管理器,實現了在未登入狀態下自動跳到登入頁面的功能。若需在其他頁面中使用登入數據,只需在對應元件中引入Vuex即可,非常方便。

以上是淺析uniapp初始化未登入跳轉的實作方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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