Asp.net Identity to an Existing Database RRS feed

  • Question

  • User2099056471 posted


    I have one aplication that use custom authentication, yet i need to implement asp.net Identity, i have some problems to do this.

    My user table : Utente (IDUtente, Username, .......)

    i Deleted Utente table and i add all columns to AspNetUsers, the new table AspNetUsers has columns :


    After that i renamed AspNetUsers to Utente, because i want that my application use always 'Utente' name.

    After i created all classes :

    public class AppDbContext : IdentityDbContext<User> { public AppDbContext() : base("DefaultConnection", throwIfV1Schema: false) { }

        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        public static AppDbContext Create()
            return new AppDbContext();

    public class AppUserManager : UserManager<User> { public AppUserManager(IUserStore<User> store) : base(store) { }

        public static AppUserManager Create(IdentityFactoryOptions<AppUserManager> options, IOwinContext context)
            var manager = new AppUserManager(new UserStore<User>(context.Get<AppDbContext>()));
            // Configure validation logic for usernames
            manager.UserValidator = new UserValidator<User>(manager)
                AllowOnlyAlphanumericUserNames = false,
                RequireUniqueEmail = true
            // Configure validation logic for passwords
            manager.PasswordValidator = new PasswordValidator
                RequiredLength = 6,
                RequireNonLetterOrDigit = true,
                RequireDigit = true,
                RequireLowercase = true,
                RequireUppercase = true,
            // Configure ApplicationUser lockout defaults
            manager.UserLockoutEnabledByDefault = true;
            manager.DefaultAccountLockoutTimeSpan = TimeSpan.FromMinutes(5);
            manager.MaxFailedAccessAttemptsBeforeLockout = 5;
            // Register two factor authentication providers. This application uses Phone and Emails as a step of receiving a code for verifying the ApplicationUser
            // You can write your own provider and plug it in here.
            manager.RegisterTwoFactorProvider("Phone Code", new PhoneNumberTokenProvider<User>
                MessageFormat = "Your security code is {0}"
            manager.RegisterTwoFactorProvider("Email Code", new EmailTokenProvider<User>
                Subject = "Security Code",
                BodyFormat = "Your security code is {0}"
            manager.EmailService = new EmailService();
            manager.SmsService = new SmsService();
            var dataProtectionProvider = options.DataProtectionProvider;
            if (dataProtectionProvider != null)
                manager.UserTokenProvider =
                    new DataProtectorTokenProvider<User>(dataProtectionProvider.Create("ASP.NET Identity"));
            return manager;

    public class AppSignInManager : SignInManager<User, string> { public AppSignInManager(AppUserManager userManager, IAuthenticationManager authenticationManager) : base(userManager, authenticationManager) { }

        public override Task<ClaimsIdentity> CreateUserIdentityAsync(User user)
            return user.GenerateUserIdentityAsync((AppUserManager)UserManager);
        public static AppSignInManager Create(IdentityFactoryOptions<AppSignInManager> options, IOwinContext context)
            return new AppSignInManager(context.GetUserManager<AppUserManager>(), context.Authentication);

    in the App_Start, is created Startup class :

    Public Sub ConfigureAuth(app As IAppBuilder)

            app.CreatePerOwinContext(AddressOf AppDbContext.Create)
            app.CreatePerOwinContext(Of AppUserManager)(AddressOf AppUserManager.Create)
            app.CreatePerOwinContext(Of AppSignInManager)(AddressOf AppSignInManager.Create)
            app.UseCookieAuthentication(New CookieAuthenticationOptions With {
            .AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
            .Provider = New CookieAuthenticationProvider With {
                .OnValidateIdentity = SecurityStampValidator.OnValidateIdentity(Of AppUserManager, Sportrick.Model.User)(
                regenerateIdentity:=Function(manager, user) user.GenerateUserIdentityAsync(manager))
            app.UseTwoFactorSignInCookie(DefaultAuthenticationTypes.TwoFactorCookie, TimeSpan.FromMinutes(5))
        End Sub

    In the End, in accountController :

    <HttpPost> <AllowAnonymous> Public Async Function LogOn(ByVal model As LogOnViewModel, ByVal returnUrl As String) As Task(Of ActionResult) If Not ModelState.IsValid Then Return View(model) End If

            Dim result = Await SignInManager.PasswordSignInAsync(model.Username, model.Password, model.RememberMe, shouldLockout:=False)
            Select Case result
                Case SignInStatus.Success
                    Return RedirectToLocal(returnUrl)
                Case SignInStatus.LockedOut
                    Return View("Lockout")
                Case SignInStatus.RequiresVerification
                    Return RedirectToAction("SendCode", New With {Key .ReturnUrl = returnUrl, Key .RememberMe = model.RememberMe})
                Case Else
                    ModelState.AddModelError("", "Invalid login attempt.")
                    Return View(model)
            End Select
        End Function

    Error Login :

    The foreign key component 'UserId' is not a declared property on type 'Login'. Verify that it has not been explicitly excluded from the model and that it is a valid primitive property.

    UserId is the Key of User entity (i have mapping in EDMX model tra Entity User <-> Table Utente)

    Wednesday, February 3, 2021 9:59 AM

All replies

  • User1686398519 posted

    Hi eljallouly, 

    I can't see UserId in the code you provided.

    Do you want to add Identity to your existing project?

    If this is the case, you can view a detailed tutorial at this link.

    Best Regards,


    Thursday, February 4, 2021 7:53 AM