0

对于我的 nuxt 应用程序,我需要使用 pusher 来处理 websocket。

我使用 pusher-js,并创建了一个 nuxt 插件来启用 pusher throughtout 我的应用程序。

问题是我需要授权才能使用推送器。我的插件:

import Pusher from 'pusher-js'

export default ({ $axios, env, $auth }, inject) => {
  if (!$auth.loggedIn) {
    return
  }
  const pusher = new Pusher(process.env.PUSHER_APP_KEY, {
    cluster: 'eu',
    authEndpoint: `${$axios.defaults.baseURL}/broadcasting/auth`,
    auth: {
      headers: {
        Authorization: $auth.strategy.token.get()
      }
    }
  })
  inject('pusher', pusher)
}

这是我在 nuxt-config 中注册插件的地方

auth: {
    redirect: {
      login: '/auth/login',
      logout: '/auth/login',
      callback: '/auth/login',
      home: '/'
    },
    strategies: {
      laravelJWT: {
        provider: 'laravel/jwt',
        url: process.env.BASE_BACK_URL + '/platform',
        endpoints: {
          login: { url: '/auth/login', method: 'post' },
          user: { url: '/auth/me' },
          logout: { url: '/auth/logout', method: 'post' },
          refresh: { url: '/auth/refresh' }
        },
        user: {
          property: 'data'
        },
        token: {
          property: 'access_token',
          maxAge: 60 * 60
        },
        refreshToken: {
          maxAge: 20160 * 60
        }
      }
    },
    plugins: [
      { src: 'plugins/pusher.js', ssr: false }
    ]
  },

当我登录并刷新页面时,一切正常。但是当我通过登录页面登录时,推送器对象没有实例化(因为我没有登录),当我想去我的聊天页面时,网站没有刷新(导致 spa),我很明显得到一个错误原因我想访问推送器,但它不存在。

那么有没有办法在我登录时刷新插件,或者只有在我登录时才启用它?

谢谢 :)

4

0 回答 0