Maintenant qu’on a une page login avec Workshop 3 : Création d’une page de login (ajout authentification), on peut maintenant afficher du contenu aux utilisateurs loggué !
Maintenant que vous avez un backend et une base de donnée, vous pouvez aussi commencer à y ajouter du contenu. Example: ajouter une table “synthesizers” qui contient des synthetiseurs, pour pouvoir les affichers aux utilisateurs.
Vous allez devoir lier chaque entités avec l’utilisateur : cela aura pour but d’afficher à un utilisateur que son contenu, ou aux autres utilisateurs de chercher du contenu pour un utilisation en particulier.
User
)
@Entity(name = "synthesizers")
public class Synthesizer {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
@Column
private String brand;
@Column
private String name;
@Column
private String creationYear;
@ManyToOne
@JoinColumn(name = "created_by")
private User createdBy;
// ...
@CrossOrigin
@RestController
public class SynthesizersController {
@Autowired
private SynthesizerService synthesizerService;
@RequestMapping("/api/synths")
public List<SynthesizerDto> synths() {
return synthesizerService.getSynthesizers().stream().map(SynthesizerDto::new).collect(Collectors.toList());
}
}
BasicAuthConfiguration
:
@Override
protected void configure(HttpSecurity security) throws Exception {
security
// disable form login security (for login)
.csrf().disable()
// requests URL
.authorizeRequests()
.antMatchers("/api/**").authenticated()
// authentication type
.and().httpBasic()
// cors
.and().cors();
}
@Transactional
synthesizerRepository.save(new Synthesizer("Juno-106", "Roland", "1984", adminUser));
synthesizerRepository.save(new Synthesizer("Synthesizer 1c/2c/3c", "Moog", "1964", adminUser));
ng
, par exemple ng generate component synth
, puis dans “synth.component.ts”:
import { Component, OnInit } from '@angular/core';
import {HttpClient, HttpHeaders} from "@angular/common/http";
import {Router} from "@angular/router";
@Component({
selector: 'app-synths',
templateUrl: './synths.component.html',
styleUrls: ['./synths.component.css']
})
export class SynthsComponent implements OnInit {
synths: any;
constructor(private http: HttpClient,
private router: Router) {
}
ngOnInit(): void {
this.http
.get("http://127.0.0.1:8080/api/synths", SynthsComponent.getAuthenticatedHttpOptions())
.subscribe(synths => {
this.synths = synths
},
error => {
alert(`You need to be logged in to see this page: ${error}`)
})
}
private static getAuthenticatedHttpOptions(): any {
const token = sessionStorage.getItem('token');
console.log(token)
if (token) {
return {
headers: new HttpHeaders({
'Authorization': `Basic ${token}`,
'Content-Type': 'application/json'
})
};
}
return undefined;
}
}
getAuthenticatedHttpOptions
qui récupère le token en session, et l’envoi au serveur, qui l’utilisera pour valider l’utilisateursynth
synth
:
<div class="container-md">
<div class="card">
<div class="card-body">
<h2>Synths</h2>
<table class="table">
<thead>
<tr>
<th scope="col">#</th>
<th scope="col">Brand</th>
<th scope="col">Name</th>
<th scope="col">Creation Year</th>
<th scope="col">Created By Username</th>
</tr>
</thead>
<tbody>
<tr *ngFor="let synth of synths">
<th scope="row"></th>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
Maintenant que nous avons un tableau d’objet, nous allons créer un formulaire d’envoi avec upload d’image, voir Workshop 5 : Upload d’image.