简而言之:我需要从Auth0请求一个令牌,然后才能检索用户信息(全部在Vuex调用的Vue插件内)。
我目前有两类-一类用于处理令牌,另一类用于实际检索配置文件。
export class Token {
constructor () {
this.options = { method: 'POST',
url: 'https://.auth0.com/oauth/token',
headers: { 'content-type': 'application/json' },
body: '{"client_id":"","client_secret":"","audience":"","grant_type":"client_credentials"}' }
}
async getToken () {
try {
this.request = request(this.options, function (error, response, body) {
if (error) {
console.error(error)
} else {
let parsed = JSON.parse(body)
let token = parsed.access_token
return token
}
})
let blah = await this.request
console.log(blah)
} catch (err) {
console.error(err)
}
}
}
export default class Profile {
constructor () {
const token = new Token()
let result = token.getToken()
//console.log(result)
this.auth0Manage = new auth0.Management({
domain: '.auth0.com',
token: `${result}`
})
}
getProfile () {
return new Promise((resolve, reject) => {
let idToken = localStorage.getItem('id_token')
let decoded = jwt_decode(idToken)
let userId = decoded.sub
this.auth0Manage.getUser(userId, function (err, data) {
if (err) {
console.error(err)
}
resolve(data)
})
})
}
}
我期望以下流程:
获取令牌>获取个人资料。它不必位于两个类中(本来不是,但是我不能在没有首先获得令牌的情况下实例化Profile的构造函数,而这必须是它自己的类(afaik)。谢谢!
答案 0 :(得分:0)
好像您没有在配置文件构造函数中等待getToken结果。问题是,构造函数始终是同步的。因此,为了等待令牌,您需要执行类似的操作,使Profile#auth0manage
为异步值并等待。也许像:
export default class Profile {
constructor () {
let token = new Token()
this.auth0Manage = new Promise((resolve, reject) => {
token.getToken().then((result) => {
return new auth0.Management({
domain: '.auth0.com',
token: `${result}`
})
}).then(resolve, reject)
})
}
async getProfile () {
let auth0Manage = await this.auth0Manage
return new Promise((resolve, reject) => {
let idToken = localStorage.getItem('id_token')
let decoded = jwt_decode(idToken)
let userId = decoded.sub
auth0Manage.getUser(userId, function (err, data) {
if (err) {
console.error(err)
}
resolve(data)
})
})
}
}
注意事项是,如果您在getToken
中遇到错误,则每次对getProfile
的调用都将返回相同的错误。因此,您可能希望以某种方式处理该问题。另外,您还必须记住要等待this.auth0Manage
的每次使用。理想情况下,您可以执行类似将auth0Manager传递给Profile的构造函数的操作,以便在提取令牌之前不会尝试创建配置文件。倾向于更好地锻炼以这种方式做事。