Windows窗体中的ASP.NET身份登录



我正在尝试做与下面问题的海报相同的事情,即从ASP.NET Identity共享用户数据库,并将其用于在另一个Windows窗体应用程序中的用户登录。

ASP.NET标识登录

我的问题是该链接中给出的响应的后续问题:如何确保windows窗体中的Microsoft.Identity.EntityFramework连接到我的ASP.NET用户数据库?也就是说,我如何检查它的连接字符串以确保它是正确的数据库?

或者有更好或更直观的方法在Windows窗体中实现.NET标识吗?

如果这个问题显得多余,我深表歉意。但我在这件事上真的很难过,任何解释都非常感谢。

感谢

老问题,但没有答案。

如何检查它的连接字符串以确保它是正确的数据库?

ADO.NET Entity Data Model添加到包含到IdentityDatabase的连接的项目中。

它将为4个表生成POCO类和一个上下文类

AspNetRole
AspNetUser
AspNetUserClaim
AspNetUserLogin

检查连接性:

对于名为WebFormsIdentityEntities:的上下文类

    WebFormsIdentityEntities context = new WebFormsIdentityEntities();
    Console.WriteLine(context.AspNetUsers.Count());

它应该返回数据,否则会引发连接错误异常。

为什么不在WinForm项目上创建一个新的上下文?链接,或创建一个DLL库用于连接到数据库,然后在您的两个项目中引用此库

我今天也有类似的项目。我有一个ASP.Net-MVC和一个WinForm项目,还有一个上下文和模型库,我做了一个包含模型、迁移和上下文的库。然后,我在两个项目中添加了对库的引用,我唯一要做的就是在App.Config或Web.Config的两个项目添加连接字符串,并添加对EntityFramework和Asp.net-identity NugetPackages的引用。

这是我在WinForm上验证登录的代码,在程序类上是无效的

        public ApplicationUserManager UsrMan = new ApplicationUserManager(new ApplicationUserStore(new libProduccionDataBase.Contexto.DataBaseContexto()));
        public void CheckLogin( bool change = false )
        {
            using (var loginfrm = new LogInForm())
            {
                if (loginfrm.ShowDialog() == DialogResult.OK)
                {
                    var t = Auxiliares.Validate(loginfrm.Response);

                    if (t.isValid &&
                        UsrMan.FindByName( loginfrm.Response.UserName ) != null &&
                        UsrMan.CheckPassword( UsrMan.FindByName( loginfrm.Response.UserName ), loginfrm.Response.Password )
                    )
                    {
                        Program.User = UsrMan.FindByName( loginfrm.Response.UserName );                            
                    }
                    else
                    {
                        if (!t.isValid)
                        {
                            var str = new System.Text.StringBuilder();
                            t.Result.ToList().ForEach( err =>
                            {
                                str.AppendFormat( "• {0}n", err.ErrorMessage );
                            } );
                            MessageBox.Show( str.ToString(), "Error...", MessageBoxButtons.OK, MessageBoxIcon.Error );
                        }
                        CheckLogin();
                    }
                }
                else
                {
                    if (!change) ExitThread();
                }
            }
        }

这是userManager:的类

public class ApplicationUserManager : UserManager<ApplicationUser, int>
{
    public ApplicationUserManager( IUserStore<ApplicationUser, int> store ) : base( store ){}
}  

以及userStore(我使用它是因为我将用户的id个性化为int):

 public class ApplicationUserStore : UserStore<ApplicationUser, ApplicationRole, int, ApplicationUserLogin, ApplicationUserRole, ApplicationUserClaim>
{
    public ApplicationUserStore(Contexto.DataBaseContexto context) : base(context)
    {
    }
}

相关内容

  • 没有找到相关文章