使用ASP.NET Identity v3进行用户注册 - 未创建用户和数据库

时间:2015-12-23 19:25:16

标签: c# asp.net-mvc entity-framework asp.net-identity asp.net-identity-3

我正在尝试使用ASP.NET MVC v5,Entity Framework v7和Identity v3从头开始构建一个简单的登录系统。

我想要的只是让用户创建一个帐户,并将该帐户保存在数据库中。我能够使用Identity v2,并且脚手架MVC应用程序使用Identity v3创建数据库并保存用户就好了,所以我尝试连接两个工作应用程序中的代码来创建一个新代码。

这是我到目前为止的代码:

Startup.cs

public class Startup
{
    public IConfigurationRoot Configuration { get; set; }
    public Startup()
    {
        var builder = new ConfigurationBuilder()
            .AddJsonFile("appsettings.json");
        builder.AddEnvironmentVariables();
        Configuration = builder.Build();
    }

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddEntityFramework()
            .AddSqlServer()
            .AddDbContext<ApplicationDbContext>(options => options.UseSqlServer(Configuration["Data:DefaultConnection:ConnectionString"]));

        services.AddIdentity<ApplicationUser, IdentityRole>()
            .AddEntityFrameworkStores<ApplicationDbContext>()
            .AddDefaultTokenProviders();

        services.AddMvc();
    }

    public void Configure(IApplicationBuilder app)
    {
        app.UseIISPlatformHandler(options => options.AuthenticationDescriptions.Clear());
        app.UseStaticFiles();
        app.UseIdentity();
        app.UseMvc(routes =>
        {
            routes.MapRoute(
                name: "default",
                template: "{controller=Home}/{action=Index}/{id?}");
        });
    }

    public static void Main(string[] args) => WebApplication.Run<Startup>(args);
}

appsettings.json 包含与数据库连接的此代码:

"Data": {
  "DefaultConnection": {
    "ConnectionString": "Server=(localdb)\\mssqllocaldb;Database=SimpleAuthenticationApp;Trusted_Connection=True;MultipleActiveResultSets=true"
  }
}

这是 Controllers / AccountController.cs 中注册POST操作的代码:

    [HttpPost]
    public async Task<IActionResult> Register (RegisterViewModel model)
    {
        try
        {
            var user = new ApplicationUser { UserName = model.Email };
            IdentityResult result = await _userManager.CreateAsync(user, model.Password);
            Console.WriteLine(result);
            return View("Home", "Index");
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex);
            return View();
        }
    }

这里,我在try块设置了一个断点,当它进入catch块时,异常读取&#34; Count = 1&#34;或&#34;发生了一个或多个错误&#34; ,我不知道如何看出这些错误是什么。

在此代码中,RegisterViewModel只是一个ViewModel,其中包含Email,Password和ConfirmPassword字段。 帐户/注册视图只是一个要求这些字段的表单。 ApplicationUser是一个从IdentityUser延伸的类。

我被困在这里,我想弄清楚如何让应用程序创建数据库并使用Identity在其中保存用户配置文件。有关代码的任何想法,或者如何查看错误消息是什么?

1 个答案:

答案 0 :(得分:1)

  

我想了解如何让应用创建数据库并使用Identity在其中保存用户配置文件。

据我所知,数据库不是在用户注册过程中自动创建的,因此您需要先更新数据库。

您可以自己创建数据库,也可以使用DB initializers

请记住 - 如果您使用代码优先方法 - 您需要在午餐应用之前应用所有迁移

VS2015 RC1中的控制台命令:dnx ef database update

  

我想要的只是让用户创建一个帐户,并将该帐户保存在数据库中。我能够使用Identity v2,并且脚手架MVC应用程序使用Identity v3创建数据库并保存用户就好了,所以我正在尝试连接两个工作应用程序中的代码以创建一个新代码。

也许从最新的代码开始将更好的方式连接新旧?尝试使用默认实现创建新项目 - 它对我来说很好,然后您可以根据需要扩展默认解决方案:)

有关AuthenticationAuthorization的更多信息。

  

这里,我在try块设置了一个断点,当它进入catch块时,异常显示“Count = 1”,或“发生了一个或多个错误”,我不知道怎么看那些错误是什么。

使用ex.ToString()方法 - 这将为您提供有关异常和所有内部异常的完整堆栈信息。