IgorPI
@IgorPI

Как проверять jwt в Nuxt, в режиме «spa»?

Как проверять jwt в Nuxt, в режиме "spa"?

Коллеги, проблема следующая:

Приложение работает в режиме "SPA"
Соответственно серверные функции, такие как "nuxtServerInit" и другие, наработают естественным образом.

При первой загрузке страницы или обновлении уже загружённой не срабатывает Middleware, по той причине, что Middleware срабатывает один раз на сервере и последующие переходы...

Но так как мы работаем в режиме SPA мы лишены возможности первого срабатывания Middleware при загрузке.

Но мне нужно защитить роутинг при первой загрузке.
Вот как я это делаю:

middleware/check-auth.js
export default async function ({store, req, redirect}) {
    
    if (process.browser){
        
        let auth = isAuth(store.getters['access_token'])
        if(!auth){
            redirect('/login')
        }
   
    }
};


Я нашёл выход!
Создав плагин
plugins/nuxt-client-init.js
export default (ctx) => {

    let auth = isAuth(Cookie.get("access_token"))
    
    if(!auth){
        ctx.redirect('/login')
    } else {
        ctx.redirect('/')
    }

}


Но, оказалось, что ctx.redirect('/login') не работает да и магазин ещё не инициализирован ((

Вот как я подключаю плагины, интересно, а имеет значение порядок загрузки?
/*
    ** Plugins to load before mounting the App
    */
    plugins: [
        { src: '~/plugins/localStorage.js', ssr: false },
        { src: '~/plugins/nuxt-client-init.js', ssr: false }
    ],
  • Вопрос задан
  • 880 просмотров
Решения вопроса 1
IgorPI
@IgorPI Автор вопроса
Коллеги, всё разрешилось следующим образом:


Происходит всего один раз при обновлении страницы или при первой загрузке на стороне клиента (в браузере)

/plugins/nuxt-client-init.js
export default (ctx) => {

    let auth = isAuth(Cookie.get("access_token"))

    if(!auth){
        ctx.redirect('/login')
    } else {
        ctx.redirect('/')
    }

}


/middleware/check-auth.js

Происходит каждый раз при изменении роута. В режиме спа не работает на сервере ()

export default async function ({store, req, redirect}) {

    if (process.browser){

        console.log('check auth')
        let auth = isAuth(Cookie.get("access_token"))
        if(!auth){
            redirect('/login')
        }

    }
};


Всё это вместе работает корректно.

1. При первой загрузке или обновлении срабатывает nuxt-client-init.js
2. При навигации работает только /middleware/check-auth.js
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@4iloveg
Full-Stack HTML Developer
Простой редирект на js не подойдет?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы