[英]Owin Authentication Taking Too Long
在本地運行時,Owin身份驗證過程花費的時間不到8秒,但在部署時,它會超時。 這是我實現的令牌生成器
ClaimsIdentity oAuthIdentity = await user.GenerateUserIdentityAsync(userManager,OAuthDefaults.AuthenticationType);
AuthenticationTicket ticket = new AuthenticationTicket(oAuthIdentity, null);
context.Validate(ticket);
我的DBContext
protected override void OnModelCreating(DbModelBuilder builder)
{
builder.Conventions.Remove<PluralizingTableNameConvention>();
builder.Entity<IdentityUserClaim>().ToTable("UserClaim").HasKey<Int32>(r => r.Id);
builder.Entity<IdentityUserLogin>().ToTable("UserLogin").HasKey<string>(l => l.UserId);
builder.Entity<IdentityRole>().ToTable("Role").HasKey<string>(r => r.Id);
builder.Entity<User>().ToTable("User").HasKey(r => new{ r.IDNumber, r.UserName});
builder.Entity<IdentityUser>().ToTable("User").HasKey<string>(r => r.UserName);
builder.Entity<IdentityUserRole>().ToTable("UserRole").HasKey(r => new { r.RoleId, r.UserId });
}
我的DBContext構造函數
public CrestfineContext():
base("Default", throwIfV1Schema: false)
{
}
還有我的Web.Config
<connectionStrings>
<add name="Default" providerName="System.Data.SQLClient" connectionString="Data Source=.\SQLEXPRESS;Integrated Security=SSPI;MultipleActiveResultSets=true;" />
</connectionStrings>
無法完全弄清楚為什么登錄過程在服務器上需要這么長時間。
編輯
我已經注意到這行代碼在執行過程中花費的時間太長
User user = await userManager.FindAsync(context.UserName, context.Password);
我已將“執行代碼優先遷移”設置為true發布了我的應用程序。 我已經向數據庫播種了一個admin,但是它不返回任何東西,只需要花費很多執行時間。
這是我的UserManager類
public class AppUserManager : UserManager<User, string>
{
public AppUserManager(IUserStore<User, string> store)
:base(store)
{
}
public static AppUserManager Create(IdentityFactoryOptions<AppUserManager> options, IOwinContext context)
{
var dbcontext = context.Get<CrestfineContext>();
var manager = new AppUserManager(new UserStore<User>(dbcontext));
return manager;
}
}
我還注意到CreateAsync花費的時間太長
IdentityResult result = await UserManager.CreateAsync(user, model.Password);
似乎Azure不支持IdentityUser( MY ASSUMPTION )的種子。 由於我試圖登錄種子的IdentityUser方法
await usermanager.FindAsync(username,password)
似乎永遠找不到用戶。 但是,這並不能解釋為什么注冊方法不起作用...
await UserManager.CreateAsync(user, model.Password)
但是,當我發布並且確實指定了執行代碼優先遷移時,所有這些都出現了。
因此,我需要一個管理員用戶,因此現在我發布了禁用Execute First Migration的Web API。 對於我的Register方法,這就是我所做的..(病理解決方案)。
if(user.UserName == "xxx@****.com")
{
var rolemanager = new RoleManager<IdentityRole>(new RoleStore<IdentityRole>(new CrestfineContext()));
var manager = new UserManager<User>(new UserStore<User>(new CrestfineContext()));
rolemanager.Create(new IdentityRole { Name = "Admin" });
manager.AddToRole(user.Id, "Admin");
}
我仍然希望有一個真正的解決方案。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.