Не уверен, что я делаю не так. Нужна помощь ... При необходимости я могу предоставить и другие коды.
Обучение внедрению Basi c HTTP-входа в Angular 8 + Spring Boot. Я написал код ниже и смог увидеть файл console.log, но он никогда не вызывает API. Это означает, что если я вижу вкладку «Сеть» в браузере chrome, она никогда не появляется. Также запускается Spring Boot в режиме отладки, и он никогда не останавливается на достигнутом. Я предполагаю, что делаю что-то не так. Также я не вижу никаких ошибок в консоли.
Примечание. Мой Spring Boot работает на 5000 портов
authentication.service.ts
import { Injectable } from '@angular/core';
import { HttpClient, HttpHeaders } from '@angular/common/http';
import { BehaviorSubject, Observable } from 'rxjs';
import { map } from 'rxjs/operators';
export class User {
constructor(
public status: string,
) { }
}
@Injectable({
providedIn: 'root'
})
export class AuthenticationService {
constructor(
private httpClient: HttpClient
) {
}
authenticate(username, password) {
console.log(username);
console.log(password);
const headers = new HttpHeaders({ Authorization: 'Basic ' + btoa(username + ':' + password) });
return this.httpClient.get<User>('http://localhost:5000/api/validateLogin', { headers }).pipe(
map(
userData => {
sessionStorage.setItem('username', username);
let authString = 'Basic ' + btoa(username + ':' + password);
sessionStorage.setItem('basicauth', authString);
return userData;
}
)
);
}
isUserLoggedIn() {
let user = sessionStorage.getItem('username')
console.log(!(user === null))
return !(user === null)
}
logOut() {
sessionStorage.removeItem('username')
}
}
basicauthhttpinterceptor.service.ts
import { Injectable } from '@angular/core';
import { HttpInterceptor, HttpRequest, HttpHandler } from '@angular/common/http';
import { AuthenticationService } from './authentication.service';
@Injectable({
providedIn: 'root'
})
export class BasicAuthHtppInterceptorService implements HttpInterceptor {
constructor() { }
intercept(req: HttpRequest<any>, next: HttpHandler) {
if (sessionStorage.getItem('username') && sessionStorage.getItem('basicauth')) {
req = req.clone({
setHeaders: {
Authorization: sessionStorage.getItem('basicauth')
}
})
}
return next.handle(req);
}
}
app.module.ts
providers: [
{
provide:HTTP_INTERCEPTORS, useClass:BasicAuthHtppInterceptorService, multi:true
}
],
РЕШЕНИЕ:
Я не изменил код в login.component.ts
Новый код:
checkLogin() {
(this.loginservice.authenticate(this.username, this.password).subscribe(
data => {
this.router.navigate([''])
this.invalidLogin = false
},
error => {
this.invalidLogin = true
}
)
);
}
Старый код:
checkLogin() {
if (this.loginservice.authenticate(this.username, this.password)
) {
this.router.navigate([''])
this.invalidLogin = false
} else
this.invalidLogin = true
}