我正在尝试为 oidc-client 开发一个与 nuxt 一起使用的插件,因为 @nuxtjs/auth 不适用于我的身份提供者。基本上一切正常,唯一的问题是我需要向组件添加一个自定义属性并在中间件中访问它以检查是否启用了身份验证。我一直在寻找其他插件以获得指导,这就是我最终得到的:
插件/用户管理器.ts
export default (context: Context, inject: Inject) => {
if (context.ssrContext) return
const userManager = new UserManager({
client_id: 'test',
authority: 'https://ouath.test.net',
automaticSilentRenew: true,
response_type: 'code',
scope: 'openid email phone role user',
redirect_uri: 'http://localhost:4200/login/authorize',
post_logout_redirect_uri: 'http://localhost:4200',
silent_redirect_uri: window.location.origin + '/silent-refresh.html'
});
inject('auth', userManager);
context.$axios.onRequest(config => {
return userManager.getUser().then(user => {
if (user && user.access_token)
config.headers.Authorization = 'Bearer ' + user?.access_token;
return config
});
});
}
中间件/auth.ts
import {Context} from '@nuxt/types';
export default async function (context: Context) {
if (context.ssrContext) return
console.log(context)
if (context.app.auth === false) return
const user = await context.$auth.getUser()
if (!user || user.expired) {
await context.$auth.signinRedirect()
}
}
示例组件
import axios from "axios"
export default {
auth: false,
components: {
},
data() {
return {
items: [],
cards: []
};
},
mounted() {
},
};
问题在于,在中间件中, if (context.app.auth === false) return 行总是返回 true,因为 context.app.auth 是 undefiend,但组件中有 auth: false 属性。如何从中间件访问 auth 属性?