패치를 가져 와서 JWT 토큰을 가져 와서 로컬 저장소에 저장합니다. 이 작동합니다.Aurelia - 두 번째 페이지가 완료되고 새 페이지가 렌더링 된 후 localStorage가 완료되는 두 개의 "가져 오기"관련 문제
그런 다음 초기 페치에 ".then"을 연결하고 다른 페치라는 함수를 통해 API에서 사용자 이름과 암호를 가져 와서 로컬 저장소에 저장했습니다.
마지막 ".then"는 루트를 새 루트로 재설정합니다. (작동) ... 그리고 JWT와 loggedIn의 첫 번째 localStorage 저장은 setRoot 호출이 시작되기 전에 완료됩니다. ...
내 문제는 localStorage에 사용자 이름을 저장하는 중입니다. 두 번째 가져 오기는 새로운 루트 페이지가 localStorage에서 사용자 이름을 얻으려고하는 생성자를 실행 한 후에 발생합니다. 두 번째 가져 오기가 아직 완료되지 않았으므로 localStorage의 'username'이 아직 설정되지 않았습니다 ...
루트를 재설정하기 전에 내 페치와 localStorage에 대한 모든 저장이 성공적으로 저장되었는지 어떻게 확인합니까?
여기에 내 초기 가져 오기를 수행하는 login.ts 파일이 있습니다.
login(username: string, password: string) {
this.userLogin.Username = username;
this.userLogin.Password = password;
// Lets do a fetch!
const task = fetch("/api/jwt", {
method: "POST",
body: JSON.stringify(this.userLogin),
headers: new Headers({ 'content-type': 'application/json' })
})
.then(response => response.json())
.then(data => {
console.log("data - in FETCH: ", data);
localStorage.setItem(this.TOKEN_KEY, JSON.stringify(data));
localStorage.setItem(this.LOGGED_IN, JSON.stringify("authenticated"));
})
.then(() => {
this.saveUserDetail();
})
.then(() => {
console.log(" before redirect USERNAME_KEY): ", localStorage.getItem(this.USERNAME_KEY));
this.router.navigate('/', { replace: true, trigger: false });
this.router.reset();
this.aurelia.setRoot('app/app/app');
})
.catch(error => {
this.clearIdentity();
});
당신은 내가 세 번째 "그 때는"에서와 사등은 "그 때는"에 this.saveUserDetail()를 호출 것을 알 수가 나는 aurelia.setRoot을 ('...').
두 번째 가져 오기가있는 this.saveUserDetail() 함수가 여기에 있습니다.
saveUserDetail() {
const session = this.getIdentity();
if (!session) {
throw new Error("No JWT present");
}
const token = session.access_token;
const headers = new Headers({
Authorization: `bearer ${token}`,
"Content-Type": "application/json; charset=utf-8"
});
const task = fetch("/api/jwt/userDetail", {
method: "GET",
headers
})
.then(response => response.json())
.then(data => {
try {
console.log("data.stringify: ", JSON.stringify(data));
localStorage.setItem(this.USERNAME_KEY, data.username);
localStorage.setItem(this.USERROLES_KEY, data.role);
} catch (Error) { }
console.log("localStorage.getItem(this.USERNAME_KEY): ", localStorage.getItem(this.USERNAME_KEY));
});
}
나는 사용자 이름에 대한 API로 돌아가야한다는 인상을 받고있었습니다. 어쩌면 내가 한 가져 오기 등 그것을 할 수있는 내가 거기에 "aurelia.setroot()를 수행하기 전에 모든로드 된 localStorage 가질 수있는 방법이 있습니까?
작동합니다. 같은 방법으로 가야했지만 가져 오기가 끝난 후 "반환 작업"을 알지 못했습니다. 마지막으로 새 루트에 사용자 이름이 표시됩니다. 고맙습니다. – si2030