nuxt-alt / auth

An alternative module to @nuxtjs/auth
https://nuxt-alt-auth.vercel.app/
MIT License
94 stars 20 forks source link

Object.hasOwn is not a function #75

Closed toniengelhardt closed 8 months ago

toniengelhardt commented 8 months ago

Environment

Nuxt Config

  // ...
  piniaPersistedstate: {
    storage: 'localStorage',
  },
  http: {
    baseURL: process.env.API_URL,
    browserBaseURL: process.env.API_URL,
  },
  auth: {
    globalMiddleware: true,
    redirectStrategy: 'query', // IMPORTANT! Otherwise, there will be an infinite logout loop.
    watchLoggedIn: true,
    cookie: {
      prefix: 'auth.',
      options: {
        path: '/',
        secure: process.env.NODE_ENV === 'production', // Enable only in production.
        sameSite: 'lax', // IMPORTANT!
      },
    },
    redirect: {
      login: '/login',
      logout: '/login',
      callback: '/login',
      home: '/',
    },
    strategies: {
      local: {
        scheme: 'refresh',
        token: {
          property: 'access',
          type: 'JWT',
        },
        refreshToken: {
          property: 'refresh',
          data: 'refresh', // IMPORTANT! Note that the refresh token is not a JWT token.
        },
        user: {
          property: false,
        },
        endpoints: {
          login: {
            url: `${process.env.API_URL}/auth/token/`,
            method: 'post',
          },
          refresh: {
            url: `${process.env.API_URL}/auth/token/refresh/`,
            method: 'post',
          },
          user: false,
          logout: {
            url: `${process.env.API_URL}/auth/logout/`,
            method: 'post',
          },
        },
      },
      google: {
        clientId: process.env.GOOGLE_CLIENT_ID,
        responseType: 'code',
        codeChallengeMethod: '', // This is important!
        endpoints: {
          scope: ['openid', 'profile', 'email'],
          token: `${process.env.API_URL}/auth/social/google/`,
          userInfo: `${process.env.API_URL}/users/me/`,
        },
        token: {
          // The token type needs to match the AUTH_HEADER_TYPES setting under
          // SIMPLE_JWT in the Django settings (Bearer by default).
          type: 'JWT',
          property: 'access',
        },
        refreshToken: {
          // The refresh token is not a JWT token!
          property: 'refresh',
        },
      },
    },
  },
  // ...

Reproduction

Not sure how to reproduce it, I get the errors in Sentry.

Describe the bug

I get Object.hasOwn is not a function errors in the middleware, see screenshots. I tested in my browser and it seems to work, so my guess is that the hasOwn function is not available in certain browsers, or older versions of certain browsers (in this particular case Chrome 91). Would it be possible to implement a check + fallback to hasOwnProperty?

See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/hasOwn

Screenshot 2023-10-29 at 16 54 28 Screenshot 2023-10-29 at 16 44 30

Additional context

No response

Logs

No response

toniengelhardt commented 8 months ago

πŸ™πŸ½ πŸ™πŸ½ πŸ™πŸ½