登录后无限请求
Infinite request after login
我有一个网站,我想在发送凭据到 API(端点)的场景中以编程方式登录。因此,如果我手动登录,该应用程序运行良好。
现在我有一个条件,如果为真,就登录,这个代码在app.component.ts
export class AppComponent {
{
this.initializeApp();
}
initializeApp() {
if((this.platform.is('mobileweb') || this.platform.is('desktop')) && this.id == "C3E1EE21-A62C-452F-BE0D-AC3EF5449F23"){
//Authenticate
var loginModel: myLoginModel =
{
applicationId: "C1F3A7D7-709D-EB11-A008-00155E00F00B",
username: "username",
password: "pwrd5893"
};
this._auth.login(loginModel).then(token => {
let user:any = jwt_decode(token);
user.token = token;
this.storageService.setItem('user',user);
}).catch(err => {
console.log(err);
});
this.navController.navigateRoot('myScreen');
}
}
}
_auth.login 方法在 auth.service.ts:
login(credentials): Promise<any> {
return this._api.security_post('Login', credentials)
.then((res: any) => {
this.storageService.setItem('token',res);
return res;
}).catch(e => {
this.logout();
return e;
})
}
并且 this._api.security_post 用于 auth.login 它在 api.service.ts
security_post(url, data) {
const promise = new Promise((resolve, reject) => {
const httpOptions = {
headers: new HttpHeaders({ 'Content-Type': 'application/json' }),
responseType: 'text' as 'json'
};
this.http.post(this.apiSecurity+'/'+url, data, httpOptions).subscribe(data => {
resolve(data)
},error=>{
reject(error);
});
})
return promise;
}
所以应用正确登录,但它一直在做无限登录请求
我该如何解决?此致
我猜想以编程方式登录的条件是 this.id == "C3E1EE21-..."
?
在那种情况下,我想它会在您的整个应用程序会话中保持 true
,因此该块会在每次组件更新时执行。
一个可能的解决方案是添加一个额外的条件,通常是仅当您当前在您的会话中没有已知用户时才登录:
if((
this.platform.is('mobileweb')
|| this.platform.is('desktop')
) && this.id == "C3E1EE21-..."
&& !this.storageService.getItem('user') ) {
//Authenticate...
}
我有一个网站,我想在发送凭据到 API(端点)的场景中以编程方式登录。因此,如果我手动登录,该应用程序运行良好。
现在我有一个条件,如果为真,就登录,这个代码在app.component.ts
export class AppComponent {
{
this.initializeApp();
}
initializeApp() {
if((this.platform.is('mobileweb') || this.platform.is('desktop')) && this.id == "C3E1EE21-A62C-452F-BE0D-AC3EF5449F23"){
//Authenticate
var loginModel: myLoginModel =
{
applicationId: "C1F3A7D7-709D-EB11-A008-00155E00F00B",
username: "username",
password: "pwrd5893"
};
this._auth.login(loginModel).then(token => {
let user:any = jwt_decode(token);
user.token = token;
this.storageService.setItem('user',user);
}).catch(err => {
console.log(err);
});
this.navController.navigateRoot('myScreen');
}
}
}
_auth.login 方法在 auth.service.ts:
login(credentials): Promise<any> {
return this._api.security_post('Login', credentials)
.then((res: any) => {
this.storageService.setItem('token',res);
return res;
}).catch(e => {
this.logout();
return e;
})
}
并且 this._api.security_post 用于 auth.login 它在 api.service.ts
security_post(url, data) {
const promise = new Promise((resolve, reject) => {
const httpOptions = {
headers: new HttpHeaders({ 'Content-Type': 'application/json' }),
responseType: 'text' as 'json'
};
this.http.post(this.apiSecurity+'/'+url, data, httpOptions).subscribe(data => {
resolve(data)
},error=>{
reject(error);
});
})
return promise;
}
所以应用正确登录,但它一直在做无限登录请求
我该如何解决?此致
我猜想以编程方式登录的条件是 this.id == "C3E1EE21-..."
?
在那种情况下,我想它会在您的整个应用程序会话中保持 true
,因此该块会在每次组件更新时执行。
一个可能的解决方案是添加一个额外的条件,通常是仅当您当前在您的会话中没有已知用户时才登录:
if((
this.platform.is('mobileweb')
|| this.platform.is('desktop')
) && this.id == "C3E1EE21-..."
&& !this.storageService.getItem('user') ) {
//Authenticate...
}