У меня есть сборка приложения с Vue. js, и я пытаюсь реализовать клиент OID C. Но я не уверен, что я полностью понимаю поток. Я следовал примеру приложения для OID C Vue client , где в SecurityService вызывается метод getSignedIn
, который проверяет, существует ли user
, и вызывает signIn
метод, если нет user
. В signIn
вызывается метод OIDC client
, метод signinRedirect
, который возвращает user
из обещания:
// Check if there is any user logged in
getSignedIn () {
let self = this
return new Promise((resolve, reject) => {
mgr.getUser().then(function (user) {
if (user == null) {
self.signIn()
return resolve(false)
} else{
return resolve(true)
}
}).catch(function (err) {
console.log(err)
return reject(err)
});
})
}
// Redirect of the current window to the authorization endpoint.
signIn () {
mgr.signinRedirect().catch(function (err) {
console.log(err)
})
}
Я пытался реализовать то же самое в своем классе обслуживания AuthService
:
const usermanager = oidc.getOidcUserManager();
export default class AuthService {
// Check if there is any user logged in
getSignedIn () {
let self = this;
return new Promise((resolve, reject) => {
usermanager.getUser().then(function (user) {
if (user === null) {
self.signinRedirect();
return resolve(false);
} else{
return resolve(true);
}
}).catch(function (err) {
console.log(err);
return reject(err);
});
})
}
// Redirect of the current window to the authorization endpoint.
signIn() {
usermanager.signinRedirect().catch(function (err) {
console.log(err);
});
}
}
Затем, если я вызову это в моем App.vue
в created
методе:
data: () => ({
authService: new AuthService(),
}),
created() {
this.authService.getSignedIn();
, я получу ошибку ниже в консоли , и приложение постоянно обновляется в браузере в l oop постоянно:
UserManager.getUser: user not found in storage
Если я использую OID C клиент менеджер signinRedirectCallback
вместо signinRedirect
, вот так:
// Redirect of the current window to the authorization endpoint.
signIn() {
usermanager.signinRedirectCallback().catch(function (err) {
console.log(err);
});
}
Тогда я получаю ошибку от Promise
:
Error: No matching state found in storage
Как правильно это реализовать, и как мне исправить это?