Après la mise en place des User Secrets, nous allons pouvoir tester notre connexion et l’authentification grâce à Facebook.
Lorsqu’on lance le site web, nous avons bien une page de connexion.
En cliquant dessus, nous atterrissons bien sur une proposition de connexion avec Facebook.
Question : comment cette page a-t-elle été générée ?
Lorsque l’on souhaite gérer l’authentification, nous avons deux choix :
- Le prévoir lors de la création de notre projet
- L’ajouter par la suite
Prévoir l’authentification au démarrage du projet
Ici, il s’agit lors du choix du type de projet, de choisir
Application web asp.net core
Puis, de définir MVC.net et sélectionner Modifier l’authentification, et choisir Comptes d’utilisateur individuel
Or lorsque l’on choisit cette option, en fait, on va laisser .net core gérer tout nativement depuis les librairies installées : oui, oui, même le html généré !
Installer l’authentification par la suite
Ainsi, que ce soit pour avoir la possibilité de modifier les pages par la suite, ou bien simplement pour installer l’authentification par la suite, vous allez pouvoir choisir les pages que vous souhaitez surcharger :
Vous cliquez sur Ajouter (depuis votre projet), et vous cliquez sur l’option du menu : « Nouvel élément générer automatiquement” (Scaffolding powa !).
En choisissant Identity, vous allez alors découvrir les pages que vous pourrez surcharger (choisissez-les toutes pour voir) :
choix Identity
Vous aurez alors noté que vous pouvez :
- soit ajouter un nouveau contexte Entities dédié
- soit surcharger un contexte Entities déjà existant
Nous avons alors rencontré un problème durant nos tests :
GetExternalLoginInfoAsync retourne toujours null : pourquoi ?
Une piste ici :
https://stackoverflow.com/questions/28999318/owin-authentication-signout-doesnt-seem-to-remove-the-cookie
A priori, le cookie d’authentification ayant déjà été généré, il n’est pas regénéré.
C’est bien ça ! Il fallait simplement supprimer le cache dans le navigateur (et supprimer les cookies et les données sauvegardées), avec la commande :
CTRL + SHIFT + SUPPR
Et le tour est joué !
Note : il se peut également que l’url que vous ayez mis dans la configuration de l’application Facebook ne soit plus bonne (à cause du port aléatoire de IISExpress).
A vous de la redéfinir dans l’administration de votre Application Facebook.
Rendre accessible notre base de données
Maintenant, notre base de données n’est pas accessible, vu qu’elle n’a :
- ni été créée dans sql serveur
- ni mise à jour grâce aux migrations prévues dans le dossier Migration
Créer d’un snapshot pour une première Migration
Nous lançons alors la commande dotnet du dotnet CLI :
dotnet migrations add Initial
Et voilà dotnet qui nous crée un beau fichier de Migration !
dotnet ef migrations add Initial
info: Microsoft.EntityFrameworkCore.Infrastructure[10403]
Entity Framework Core 2.1.2-rtm-30932 initialized ‘testauthentificationavecscallfolderContext’ using provider ‘Microsoft.EntityFrameworkCore.SqlServer’ with options: None
Done. To undo this action, use ‘ef migrations remove’
public partial class Initial : Migration
{
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.CreateTable(
name: « AspNetRoles »,
columns: table => new
{
Id = table.Column<string>(nullable: false),
Name = table.Column<string>(maxLength: 256, nullable: true),
NormalizedName = table.Column<string>(maxLength: 256, nullable: true),
ConcurrencyStamp = table.Column<string>(nullable: true)
},
constraints: table =>
{
table.PrimaryKey(« PK_AspNetRoles », x => x.Id);
});
migrationBuilder.CreateTable(
name: « AspNetUsers »,
columns: table => new
{
Id = table.Column<string>(nullable: false),
……
Mise à jour de la base de données
En analysant le fichier appsettings.json, nous voyons que moteur Scaffolding a prévu une base de données.
A nous maintenant de la mettre à jour avec la commande suivante (qui appellera notre premier fichier de Migration tout juste généré) :
dotnet ef database update
Et nos tables sont bien créées :
Vous avez testé de votre côté ? Chez nous ça fonctionne bien ! Lâchez vos com’ !