다음 Login 작업이 있고 UserManager.FindAsync는 항상 null을 반환합니다. 맨 아래에 표시된 코드로 사용자를 시드하려고합니다.UserManager.FindAsync는 항상 null을 반환합니다.
아무도 도와 줄 수 있습니까?
public async Task<ActionResult> Login(LoginViewModel model, string returnUrl)
{
if (ModelState.IsValid)
{
var user = await UserManager.FindAsync(model.Email, model.Password);
if (user != null)
{
await SignInAsync(user, model.RememberMe);
return RedirectToLocal(returnUrl);
}
else
{
ModelState.AddModelError("", "Invalid username or password.");
}
}
// If we got this far, something failed, redisplay form
return View(model);
}
마이그레이션에 대한 Configuration.cs에는 다음과 같은 코드 비트가 있습니다. 그것은 내가 위의 코드로 로그인하려고 시도하는 사용자를 시드하는 것입니다.
protected override void Seed(Temps.Models.ApplicationDbContext context)
{
if (!context.Roles.Any(r => r.Name == "Consultant"))
{
var store = new RoleStore<IdentityRole>(context);
var manager = new RoleManager<IdentityRole>(store);
var role = new IdentityRole { Name = "Consultant" };
manager.Create(role);
}
if (!context.Users.Any(u => u.UserName == "Consultant"))
{
var store = new UserStore<ApplicationUser>(context);
var manager = new UserManager<ApplicationUser>(store);
var user = new ApplicationUser
{
UserName = "Consultant",
Email = "[email protected]"
};
manager.Create(user, "password");
manager.AddToRole(user.Id, "Consultant");
}
UPDATE 나는 아래의 씨앗 코드에 대해 다음과 같은 오류가 안토니의 변화, 어떤 아이디어를 구현 한 후
?PM> Update-Database 대상 데이터베이스에 적용되는 SQL 문을 보려면 '-Verbose'플래그를 지정하십시오. 명시 적 마이그레이션이 보류 중입니다. 시드 실행 방법. System.InvalidOperationException : UserId를 찾을 수 없습니다. System.Data.Entity.Migrations.DbMigrator에서 Microsoft.AspNet.Identity.UserManagerExtensions.AddToRole에서 Microsoft.AspNet.Identity.UserManager 2.<AddToRoleAsync>d__83.MoveNext() --- End of stack trace from previous location where exception was thrown --- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at Microsoft.AspNet.Identity.AsyncHelper.RunSync[TResult](Func
FUNC 1)에서 [TUser, TKEY (UserManager 2 manager, TKey userId, String role) at Temps.Migrations.Configuration.Seed(ApplicationDbContext context) in c:\Work\@wandc\Temps\trunk\src\Temps\Migrations\Configuration.cs:line 67 at System.Data.Entity.Migrations.DbMigrationsConfiguration
1.OnSeed (DbContext 컨텍스트) .SeedDatabase() System.Data.Entity.Migrations.Infrastructure.MigratorLoggingDecorator.SeedDatabase (에서 ) System.Data.Entity.Migrations.DbMigrator.Upgrade (IEnumerable을 1 pendingMigrations, String targetMigrationId, String lastMigrationId) at System.Data.Entity.Migrations.Infrastructure.MigratorLoggingDecorator.Upgrade(IEnumerable
1 pendingMigrations, 문자열 targetMigrationId, 문자열 lastMigrationId) 시스템에서 에서 . Data.Entity.Migrations.DbMigrator.UpdateInternal (String targetMigration) at System.Data.Entity.Migrations.DbMigrator. <> c__DisplayClassc.b__b() at System.Data.Entity.Mi grations.DbMigrator.EnsureDatabaseExists (액션 mustSucceedToKeepDatabase) System.Data에서 System.Data.Entity.Migrations.DbMigrator.Update (문자열 targetMigration) 에서 System.Data.Entity.Migrations.Infrastructure.MigratorBase.EnsureDatabaseExists (액션 mustSucceedToKeepDatabase) 에서 .Entity.Migrations.Infrastructure.MigratorBase.Update (문자열 targetMigration) System.AppDomain에서 System.AppDomain.DoCallBack에서 System.Data.Entity.Migrations.Design.ToolingFacade.UpdateRunner.Run() (CrossAppDomainDelegate callBackDelegate) 에서 . DoCallBack (CrossAppDomainDelegate callBackDelegate) at System.Data.Entity.Migrations.Design.ToolingFacade.Run (BaseRunner runner) at System.Data.Entity.Migrations.Design.ToolingFacade.Update (String targetMigration, Boolean force) at System.Data.Entity.Migrations.UpdateDatabaseCommand. <> c__DisplayClass2 < .ctor> b__0() at System.Data.Entity.Migrations.MigrationsDomainCommand.Execute (작업 명령) UserId를 찾을 수 없습니다.
코드 :
if (!context.Users.Any(u => u.UserName == "[email protected]"))
{
string emailAddress = "[email protected]";
var store = new UserStore<ApplicationUser>(context);
var manager = new UserManager<ApplicationUser>(store);
var user = new ApplicationUser()
{
UserName = emailAddress,
Email = emailAddress,
FirstName = "Admin",
LastName = "Admin",
PasswordHint = password
};
manager.Create(user, password);
manager.AddToRole(user.Id, "Admin");
}
감사 안토니로 로그인 할 수 있고 지금은 위의 오류가? – Burt
역할에 추가하기 전에 성공을 위해'manager.Create (user, password)'의 반환 값을 확인하십시오. 내 생각 엔 사용자 생성에 문제가있어 아마도 암호가 충분하지 않을 수도 있습니다. (또한 좋은 암호 힌트 :). –
:) 테스트 용으로 만 사용하면 처음에는 모든 것이 삭제되고 실제 환경에서 다시로드됩니다 (희망 사항) – Burt