对于我的 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),我很明显得到一个错误原因我想访问推送器,但它不存在。
那么有没有办法在我登录时刷新插件,或者只有在我登录时才启用它?
谢谢 :)