AspNetCore.Docs/aspnetcore/security/authentication/add-user-data.md

163 lines
6.4 KiB
Markdown
Raw Normal View History

---
title: Add, download, and delete custom user data to Identity in an ASP.NET Core project
author: rick-anderson
description: Learn how to add custom user data to Identity in an ASP.NET Core project. Delete data per GDPR.
monikerRange: '>= aspnetcore-2.1'
ms.author: riande
ms.date: 6/16/2018
uid: security/authentication/add-user-data
---
# Add, download, and delete custom user data to Identity in an ASP.NET Core project
By [Rick Anderson](https://twitter.com/RickAndMSFT)
This article shows how to:
* Add custom user data to an ASP.NET Core web app.
* Decorate the custom user data model with the [PersonalData](/dotnet/api/microsoft.aspnetcore.identity.personaldataattribute?view=aspnetcore-2.1) attribute so it's automatically available for download and deletion. Making the data able to be downloaded and deleted helps meet [GDPR](xref:security/gdpr) requirements.
The project sample is created from a Razor Pages web app, but the instructions are similar for a ASP.NET Core MVC web app.
[View or download sample code](https://github.com/aspnet/Docs/tree/live/aspnetcore/security/authentication/add-user-data/sample) ([how to download](xref:tutorials/index#how-to-download-a-sample))
## Prerequisites
[!INCLUDE [](~/includes/2.1-SDK.md)]
## Create a Razor web app
# [Visual Studio](#tab/visual-studio)
* From the Visual Studio **File** menu, select **New** > **Project**. Name the project **WebApp1** if you want to it match the namespace of the [download sample](https://github.com/aspnet/Docs/tree/live/aspnetcore/security/authentication/add-user-data/sample) code.
* Select **ASP.NET Core Web Application** > **OK**
* Select **ASP.NET Core 2.1** in the dropdown
* Select **Web Application** > **OK**
* Build and run the project.
# [.NET Core CLI](#tab/netcore-cli)
```cli
dotnet new webapp -o WebApp1
```
2018-06-09 09:02:20 +08:00
[!INCLUDE[](~/includes/webapp-alias-notice.md)]
---
## Run the Identity scaffolder
# [Visual Studio](#tab/visual-studio)
* From **Solution Explorer**, right-click on the project > **Add** > **New Scaffolded Item**.
* From the left pane of the **Add Scaffold** dialog, select **Identity** > **ADD**.
* In the **ADD Identity** dialog, the following options:
* Select your existing layout file *~/Pages/Shared/_Layout.cshtml*
* Select the following files to override:
* **Account/Register**
* **Account/Manage/Index**
* Select the **+** button to create a new **Data context class**. Accept the type (**WebApp1.Models.WebApp1Context** if you named the project **WebApp1**).
* Select the **+** button to create a new **User class**. Accept the type (**WebApp1User** if you named the project **WebApp1**) > **Add**.
* Select **ADD**.
# [.NET Core CLI](#tab/netcore-cli)
If you have not previously installed the ASP.NET scaffolder, install it now:
```cli
dotnet tool install -g dotnet-aspnet-codegenerator
```
Add a package reference to [Microsoft.VisualStudio.Web.CodeGeneration.Design](https://www.nuget.org/packages/Microsoft.VisualStudio.Web.CodeGeneration.Design/) to the project (.csproj) file. Run the following command in the project directory:
```cli
dotnet add package Microsoft.VisualStudio.Web.CodeGeneration.Design
dotnet restore
```
Run the following command to list the Identity scaffolder options:
```cli
dotnet aspnet-codegenerator identity -h
```
In the project folder, run the Identity scaffolder:
```cli
dotnet aspnet-codegenerator identity -u WebApp1User -fi Account.Register;Account.Manage.Index
```
-------------
Follow the instruction in [Migrations, UseAuthentication, and layout](xref:security/authentication/scaffold-identity#efm) to perform the following steps:
* Create a migration and update the database.
* Add `UseAuthentication` to `Startup.Configure`.
* Add `<partial name="_LoginPartial" />` to the layout file.
* Test the app:
* Register a user
* Select the new user name (next to the **Logout** link). You might need to expand the window or select the navigation bar icon to show the user name and other links.
* Select the **Personal Data** tab.
* Select the **Download** button and examined the *PersonalData.json* file.
* Test the **Delete** button, which deletes the logged on user.
## Add custom user data to the Identity DB
Update the `IdentityUser` derived class with custom properties. If you named your project WebApp1, the file is named *Areas/Identity/Data/WebApp1User.cs*. Update the file with the following code:
[!code-csharp[Main](add-user-data/sample/Areas/Identity/Data/WebApp1User.cs)]
Properties decorated with the [PersonalData](/dotnet/api/microsoft.aspnetcore.identity.personaldataattribute?view=aspnetcore-2.1) attribute are:
2018-06-05 15:20:57 +08:00
* Deleted when the *Areas/Identity/Pages/Account/Manage/DeletePersonalData.cshtml* Razor Page calls `UserManager.Delete`.
* Included in the downloaded data by the *Areas/Identity/Pages/Account/Manage/DownloadPersonalData.cshtml* Razor Page.
### Update the Account/Manage/Index.cshtml page
Update the `InputModel` in *Areas/Identity/Pages/Account/Manage/Index.cshtml.cs* with the following highlighted code:
[!code-csharp[Main](add-user-data/sample/Areas/Identity/Pages/Account/Manage/Index.cshtml.cs?name=snippet&highlight=28-36,63-64,87-95,120)]
Update the *Areas/Identity/Pages/Account/Manage/Index.cshtml* with the following highlighted markup:
[!code-html[Main](add-user-data/sample/Areas/Identity/Pages/Account/Manage/Index.cshtml?highlight=34-41)]
### Update the Account/Register.cshtml page
Update the `InputModel` in *Areas/Identity/Pages/Account/Register.cshtml.cs* with the following highlighted code:
[!code-csharp[Main](add-user-data/sample/Areas/Identity/Pages/Account/Register.cshtml.cs?name=snippet&highlight=8-16,43,44)]
Update the *Areas/Identity/Pages/Account/Register.cshtml* with the following highlighted markup:
[!code-html[Main](add-user-data/sample/Areas/Identity/Pages/Account/Register.cshtml?highlight=16-25)]
Build the project.
### Add a migration for the custom user data
# [Visual Studio](#tab/visual-studio)
In the Visual Studio **Package Manager Console**:
```PMC
Add-Migration CustomUserData
Update-Database
```
# [.NET Core CLI](#tab/netcore-cli)
```cli
dotnet ef migrations add CustomUserData
dotnet ef database update
```
------
## Test create, view, download, delete custom user data
Test the app:
* Register a new user.
* View the custom user data on the `/Identity/Account/Manage` page.
2018-06-05 15:20:57 +08:00
* Download and view the users personal data from the `/Identity/Account/Manage/PersonalData` page.