Я новичок в angular, я вызываю два вызова службы в конструкторе моего login.component.ts, где первый вызов является успешным, чтобы получить токен доступа, и используя этот токен доступа, я должен сделать еще один API вызов, для которого параметр url изменяется и выбрасывает 404, не найден, локально работает, но когда я размещаю его на сервере, возникает ошибка в zone-evergreen. js .pre-build-optimizer. js. Я пробовал много способов, кажется, ничего не работает, ниже прикрепил скриншот ошибки, вот мой код.
service.ts
const endpoint = "https://server.mydjangoapi.org/mywebapi";
export class restapiService {
baseurl: string;
constructor(private http?: HttpClient,
public dataservice?: DataInteractionService,
@Inject('BASE_URL') baseUrl?: string) {
this.baseurl = baseUrl;
}
private handleError(error) {
return throwError(error);
}
//Because we are not using a type checker, so the response should be extracted. Add this function after the constructor for extract it.
private extractData(res: Response) {
let body = res;
return body || {};
}
//Service call for authentication
getAccessToken(authcode: any): Observable<any> {
try {
var jsonstring = { "grant_type": "authorization_code", "code": authcode, "client_id": "Django" }
var formData = new FormData();
Object.keys(jsonstring).forEach((key) => { formData.append(key, jsonstring[key]) });
return this.http.post<any>("https://somegettoken.org/o/token/", formData).pipe(map(this.extractData),
catchError(this.handleError));
} catch (error) {
console.log(error);
}
}
getUser(accesstoken_param?: any): Observable<any> {
try {
var accesstoken = '';
if (isNullOrUndefined(this.dataservice.accesstoken)) {
accesstoken = sessionStorage.getItem("accesstoken")
}
else {
accesstoken = this.dataservice.accesstoken
}
var authheader = {
headers: new HttpHeaders({
'accesstoken': accesstoken,
'Content-Type': 'application/json',
})
};
return this.http.get(endpoint + "/getuser/prod/?format=json", authheader).pipe(map(this.extractData),
catchError(this.handleError));
} catch (error) {
console.log(error);
}
}
}
логин. component.ts
export class LoginComponent implements OnInit {
accesstoken: any;
auth_code: any;
baseurl: any;
application: string;
constructor(private route: ActivatedRoute,
private service: myrestapiService,
private datainteraction: DataInteractionService,
private router: Router, @Inject('BASE_URL') baseUrl: string) {
this.baseurl = baseUrl;
console.log(this.baseurl);
this.route.queryParams.subscribe(params => {
if (params['state']) {
if (params['state'] === "myutility") {
this.application = "appliance"
}
else {
this.application = params['state'];
}
sessionStorage.setItem("screen", "search");
}
else {
this.application = "appliance"
}
//if params and session not defined redirects to the login page of another application which returns auth_code and comes back to my appliaction
if (!params['code'] && !sessionStorage.getItem("userGroupInfo")) {
window.location.href = 'https://myatuhorizesite.org/o/authorize/?response_type=code&client_id=Django&redirect_uri=' + this.baseurl + '%23/login&state=' + this.application;
}
else {
datainteraction.accesstoken = "";
if (params['code']) {
// if auth_code is there get the access_token using authcode
service.getAccessToken(params['code']).subscribe((data) => {
datainteraction.accesstoken = data.access_token
sessionStorage.setItem("accesstoken", data.access_token);
// get user details using access_token
service.getUser().subscribe((data1) => {
sessionStorage.setItem("userGroupInfo", JSON.stringify(data1));
datainteraction.userGroupInfo = JSON.parse(sessionStorage.getItem("userGroupInfo"));
this.navigate();
})
},
err => {
window.location.href = 'https://myatuhorizesite.org/o/authorize/?response_type=code&client_id=Django&redirect_uri=' + this.baseurl + '%23/login&state=' + this.application;
})
}
else {
datainteraction.userGroupInfo = JSON.parse(sessionStorage.getItem("userGroupInfo"));
this.navigate();
}
}
});
}
ngOnInit() {
}
navigate() {
if (this.application) {
sessionStorage.setItem("apptype", this.application);
this.datainteraction.apptype = this.application;
}
if (!sessionStorage.getItem("apptype")) {
sessionStorage.setItem("apptype", this.application);
}
if (!sessionStorage.getItem("screen")) {
this.router.navigate(['/home']);
} else {
this.router.navigate(['/home/' + sessionStorage.getItem("screen")]);
}
}
}
Примечание: Я не хочу передавать токен доступа в качестве параметра параметру sevice.getuser (), я хочу получить к нему доступ согласно логу c определено в service.getuser () ![Api call error](https://i.stack.imgur.com/vQvTp.jpg)
Примечание : когда используется перенаправление для входа в систему, мое приложение переходит к своему приложению под URL, чтобы получить код авторизации, где account / login /? Next = добавляется к моей конечной точке, показанной на снимке экрана при выполнении второго вызова API https://myatuhorizesite.org/accounts/login/?next=https: //myatuhorizesite.org/o/authorize/? Response_type = код & client_id = Джанго & redirect_uri =% 3Dhttps% 3A // myapplication.org / mywebapp /% 2523 / Войти% 26state% 3Dabcapp