Nuxt 3 + msal — ошибка non_browser_environment

Введение

Всем привет

Я пытаюсь внедрить активный каталог Azure B2c в свое приложение nuxt 3. Поскольку @nuxtjs/auth-next еще не работает для nuxt 3, я пытаюсь сделать свой собственный компонуемый, который использует пакет npm @azure/msal-browser.

Причина, по которой я пишу эту статью, заключается в том, что она не работает. Код, который я создал, можно увидеть ниже:

Ошибка:

Терминал
[nitro] [dev] [unhandledRejection] BrowserAuthError: non_browser_environment: запросы на вход и токены не поддерживаются в средах без браузера. 21:07:32 at BrowserAuthError.AuthError [как конструктор]

Браузерная консоль
PerformanceClient.ts:100 Uncaught (в обещании) TypeError: this.startPerformanceMeasurement не является функцией в PerformanceClient2.startMeasurement

Код:

файл: /composables/useAuth.js

import * as msal from '@azure/msal-browser'

let state = {
    applicationInstance: null,  
}

export const useAuth = () => {
    //config auth
    const msalConfig = {
        auth: {
            clientId: '',
            authority: '',
            knownAuthorities: [``],
            redirectUri: '',
            knownAuthorities: ['']
        },
        cache: {
            cacheLocation: "sessionStorage", // This configures where your cache will be stored
            storeAuthStateInCookie: false, // Set this to "true" if you are having issues on IE11 or Edge
        },
    }
    state.applicationInstance = new msal.PublicClientApplication(msalConfig);

    return {
        signIn
    }
}

const signIn = () => {
    //handle redirect
    state.applicationInstance
        .addEventCallback(event => {
            if (event.type == "msal:loginSuccess" && event.payload.account)
            {   
                const account = event.payload.account
                state.applicationInstance.setActiveAccount(account)
                console.info(account)
            }
        })

    //handle auth redirect
    state.applicationInstance
        .handleRedirectPromise()
        .then(() => {
            const account = state.applicationInstance.getActiveAccount()
            if (!account) {
                const requestParams = {
                    scopes: ['openid', 'offline_access', 'User.Read'],
                }
                state.applicationInstance.loginRedirect(requestParams)
            }
        })
}

файл: index.vue

<script setup>
const auth = useAuth();
auth.signIn()
</script>
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
140
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вам нужно убедиться, что вы пытаетесь войти в систему только в браузере, потому что Nuxt также работает на стороне сервера.

Вы можете проверить, являетесь ли вы клиентом, с помощью process.client или process.server для серверной части.

<script setup>
if (process.client) {
const auth = useAuth();
auth.signIn() // Try to sign in but only on client.
}
</script>

NuxtJS/VueJS: как узнать, отображалась ли страница только на стороне клиента?

Привет, спасибо за ваш ответ, и он действительно помог с моей первой ошибкой, он все еще дает мне ошибку консоли браузера: PerformanceClient.ts:100 Uncaught (in promise) TypeError: this.startPerformanceMeasurement is not a function at PerformanceClient2.startMeasurement на msal.loginRedirect. Любые идеи?

Eric 14.01.2023 22:02

Другие вопросы по теме