Where are the Login and Register pages in an AspNet Core scaffolded app?

In VS 2017, I created a new ASP.NET Core Web Application. On the second page of the wizard, I chose Web Application, and for Authentication, I chose "Individual User Accounts".

Now, I'm trying to find the Pages associated with /Account/Register and /Account/Login.

_Layout.cshtml brings in _LoginPartial.cshtml, much as it did in classic MVC:

<div class="navbar-collapse collapse">
    <ul class="nav navbar-nav">
        <li><a asp-page="/Index">Home</a></li>
        <li><a asp-page="/About">About</a></li>
        <li><a asp-page="/Contact">Contact</a></li>
    </ul>
    <partial name="_LoginPartial" />
</div>

If the user is not signed in then _LoginPartial includes <a> tags that point to the login and register pages:

<ul class="nav navbar-nav navbar-right">
    <li><a asp-area="Identity" asp-page="/Account/Register">Register</a></li>
    <li><a asp-area="Identity" asp-page="/Account/Login">Login</a></li>
</ul>

That all seems to make sense. But I would have expected the Areas folder structure to include the Register and Login folders. It does not. The only thing I find there is _ViewStart.cshtml

Areas file structure

I know that the scaffolded code works. When I run the project, the Register link points to "/Identity/Account/Register", and the Login link points to "/Identity/Account/Login". Clicking on the Register link gets me a registration page that includes the text "Create a new account".

But I can't find the text "Create a new account" anywhere in the project.

Can someone tell me what I'm missing?


Solution 1:

It was announced during the preview of asp.net core 2.1 that the Identity UI would be moved to a new Razor Class Library. https://blogs.msdn.microsoft.com/webdev/2018/03/02/aspnetcore-2-1-identity-ui/

It is still possible to scaffold the Identity Views into your own project if you prefer local views: https://docs.microsoft.com/en-us/aspnet/core/security/authentication/scaffold-identity?view=aspnetcore-2.1&tabs=visual-studio

Solution 2:

You can do this from within Visual Studio, Right click on your Project and select Add->New Scaffolded Item

New Scaffolded Item

Then select Identity and click on Add Select Identity

Now select the pages you want to override. Drop down Data Context Class: and your Namespace and Context should be pre-filled in for you.

Select Pages

Finally click on Add. If you have already existing override files there (i.e. from the template) this will warn about overwriting them.

Solution 3:

Right-click on the project, select Add -> New Scaffold Item, on the dialog select Identity in the left pane.

enter image description here

enter image description here


You can also generate these pages using this command:

dotnet aspnet-codegenerator identity -dc WebApplication1.Data.ApplicationDbContext

Make sure you replace with your own namespace + DbContext name. The pages are generated here:

enter image description here


If you see this problem:

Feature 'default literal' is not available in C# 7.0. Please use language version 7.1 or greater.

You may be able to fix it by adding this to you .csproj and rebuilding it:

<PackageReference Include="Microsoft.CodeAnalysis.Common" Version="3.2.0-beta3-final" />
<PackageReference Include="Microsoft.CodeAnalysis.CSharp" Version="3.2.0-beta3-final" />
<PackageReference Include="Microsoft.CodeAnalysis.CSharp.Workspaces" Version="3.2.0-beta3-final" />