簡體   English   中英

如何防止未登錄的用戶訪問 admin 路由?

[英]How to prevent users who are not logged in from accessing the admin route?

在我的應用程序中,用戶沒有帳戶,因此默認情況下每個注冊帳戶都是管理員帳戶。 當管理員登錄時,他會收到一個有效的令牌,他可以使用該令牌向后端發出 POST 請求並創建/更新/刪除內容。

這是我的問題 - 即使非管理員無法通過管理面板創建/讀取/更新/刪除內容,因為他們沒有有效的令牌並且后端拒絕他們的 POST 請求,他們仍然可以訪問管理面板通過導航到/admin

我可以通過檢查 Vuex 用戶 object 是否為空來檢查用戶是否已登錄,如果用戶未登錄,則將用戶重定向到家,但如果用戶願意,我很漂亮,他可以欺騙登錄(令牌仍然無效)。

這里最好的做法是什么?

最佳實踐是使用vue-session-npm並在管理員成功登錄后生成 session。 然后您可以檢查 session 是否存在。 如果存在,則授予使用 /admin 路由器的權限或將用戶重定向到登錄頁面。 要了解更多瀏覽 session 和 cookies 使用。

您可以在您的路由器上注冊一個全局的 before 將在每次調用時執行,您可以檢查用戶權限。

詳細信息: https://router.vuejs.org/guide/advanced/navigation-guards.html#global-before-guards

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

要創建更結構化的方式,您可以在router.js上添加元數據

您可以將用戶角色添加到您的 TOKEN

{
    path: '/admin/path',
    meta: { requiresAuth: true, roles:[ADMIN, MANAGER] }
}

ADMIN、MANAGER 可以是字符串、數字,這取決於您的邏輯。

所以beforeEach就像:

router.beforeEach((to,from,next) => {
    //get the authenticated user 
    const authUser = store.getters.getUser
    //check sensitive routes
    if (to.meta.requiresAuth) {
        if (!authUser) {
            next('/login')
        } else {
            //check user ROLE/Permission
            if (hasPermission(authUser, to.meta.roles)) {
                next()
            } else {
                next('/unauthorized')
            }
        }
    } else {
        next();
    }
})

hasPermission function 僅檢查經過身份驗證的用戶是否具有允許他訪問路徑的角色。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM