ASP.NET ID 제공자 SignInManager에서 오류가 계속 반환됨
MVC5용 표준 ASP Identity 공급자와 문제가 있습니다.메소드에 로그인하는 즉시:
await SignInManager.PasswordSignInAsync(model.Email, model.Password, model.RememberMe, shouldLockout: false);
계속 실패를 반환합니다.그래서 저는 디버깅을 시작했습니다.
UserManager.FindByEmail(model.Email);
로그인을 시도하는 사용자에게 유효한 사용자 ID를 반환합니다.그 다음에 사용했습니다.
SignInManager.UserManager.CheckPassword(UserIDObtainedFromFind, model.Password);
그러면 true가 반환됩니다. 즉, 제공한 암호가 유효합니다.

추적할 수 있는 방법, 로그인 관리자 디버깅에 대한 모든 아이디어.PasswordSignInAsync 메서드에서 실패한 위치를 확인하시겠습니까?
로그인 관리자.PasswordSignIn은 사용자 이름에서 벗어나 사용자 이름이 전달하는 전자 메일과 동일한지 다시 확인해야 합니다.
한다면username != email:
ApplicationUser signedUser = UserManager.FindByEmail(model.Email);
var result = await SignInManager.PasswordSignInAsync(signedUser.UserName, model.Password, model.RememberMe, shouldLockout: false);
저의 경우 이메일과 비밀번호를 확인하는 동일한 시도에서 이메일은 제 사용자와 동일합니다.
var userDO = _userManager.FindByEmailAsync(Input.Email).Result;
var validatr = _userManager.CheckPasswordAsync(userDO, Input.Password);
이메일 = userName
참된 결과
그리고 데이터베이스를 확인해보니 작동하지 않는 사용자의 확인란이 거짓입니다.
그런 다음 시작 시 검증 매개 변수의 유효성을 검사해야 합니다.그것은 Startup.cs 안에 있습니다.
public void ConfigureServices(ServiceCollection services)
{
//......
services.AddDefaultIdentity<IdentityUser>(options => options.SignIn.RequireConfirmedAccount = false)
.AddRoles<IdentityRole>()
.AddEntityFrameworkStores<ApplicationDbContext>();
//......
}
위의 속성 설정 로그인하기 위해 확인된 IUserConfirmation 계정이 필요한지 여부를 나타내는 플래그를 가져오거나 설정합니다.
options.SignIn.RequireConfirmedEmail = false;
options.SignIn.RequireConfirmedPhoneNumber = false;
잘 가요
시작 시 확인:
options.SignIn.RequireConfirmedEmail = false;
options.SignIn.RequireConfirmedPhoneNumber = false;
이 값이 참으로 설정된 경우 로그인하기 전에 전자 메일 또는 전화 번호를 확인해야 합니다.
저는 SQL Profiler를 사용하여 PasswordSignInAsync가 호출하는 쿼리를 확인하는 것이 유용하다고 생각했습니다.저의 경우 - 판별기가 "사용자 컨텍스트"로 설정된 사용자를 찾으려 한다는 것을 알게 되었습니다.물론 제가 ASP에서 업그레이드했기 때문에 이것은 제게 효과가 없었습니다.NET Membership Services 및 이 식별자가 사용자로 설정되었습니다.새 코드가 Entity Framework를 사용하기 때문에 이 값은 사용자에 대해 사용하는 클래스에서 파생된 것으로 나타납니다.빠른 업데이트 문이 문제를 해결했습니다.
UPDATE AspNetUsers SET Discriminator = 'UserContext' WHERE Discriminator = 'User'
나를 위한 일
ApplicationUser signedUser = UserManager.FindByEmail(model.Email);
var result = await SignInManager.PasswordSignInAsync(signedUser.UserName, model.Password, model.RememberMe, shouldLockout: false);
ApplicationUser signedUser = UserManager.FindByEmail(model.Email);
var result = await SignInManager.PasswordSignInAsync(signedUser.UserName,
model.Password, model.RememberMe, shouldLockout: false);
제 사용자 이름이 제 이메일과 동일하지 않기 때문에 이것은 저에게 효과가 있었습니다.이메일과 사용자 이름이 같아야 합니다.
지금은 좀 늙었지만, 이 문제에 대한 저의 생각은 이렇습니다.
Identity 데이터베이스(역할 및 관리자 계정)에 표준 항목이 있는지 확인하기 위해 유틸리티에서 정적 데이터를 생성하고 있었습니다.
엔티티를 만들고 컨텍스트와 직접 대화하여 누락된 역할이나 사용자를 만들었습니다.제가 가지고 있던 문제는 제가 설정하지 않았다는 것입니다.NormalizedUserName그리고.NormalizedEmail밭난 그냥 설정하고 있었어요.Email그리고.UserName.
(EF Core 2.x와 함께) 사용하는 최종 코드는 다음과 같습니다.
if (!_context.Users.Any(_ => _.Id.Equals(Users.AdministratorId)))
{
var user = new ApplicationUser
{
Id = Users.AdministratorId,
UserName = Users.AdministratorEmail,
Email = Users.AdministratorEmail,
EmailConfirmed = true,
NormalizedEmail = Users.AdministratorEmail.ToUpper(),
NormalizedUserName = Users.AdministratorEmail.ToUpper(),
SecurityStamp = Guid.NewGuid().ToString()
};
var hasher = new PasswordHasher<ApplicationUser>();
user.PasswordHash = hasher.HashPassword(user, "our_password");
_context.Users.Add(user);
}
위의 모든 것이 문제의 원인이 아닌 경우(나의 경우 IUserStore 구현 시 복사 붙여넣기 버그가 문제임), "SignInManager를 추적하거나 디버깅하는 방법에 대한 모든 아이디어"라는 질문에 답합니다.PasswordSignInAsync 메서드에서 실패한 위치를 확인합니다.", 이 메서드를 디버깅하는 한 가지 방법은 SignInManager 메서드의 내용을 복사하는 것입니다.PasswordSignInAsync에서 파생된 클래스(ApplicationSignInManager)로 이동합니다.
MVC5 이하를 사용하는 경우 여기나 여기에서 소스 코드를 찾을 수 있습니다.
제 경험이 누군가를 도울 수 있을지도 모릅니다.제 경우 컴퓨터를 변경한 것이 문제였고, 새 Windows 10에서는 ASP가 아닌 IIS 기능이 설치되었습니다.NET 기능.
언급URL : https://stackoverflow.com/questions/26430094/asp-net-identity-provider-signinmanager-keeps-returning-failure
'programing' 카테고리의 다른 글
| Groovy에서 문자열이 공백뿐만 아니라 null이 아닌지 확인하려면 어떻게 해야 합니까? (0) | 2023.09.02 |
|---|---|
| 레일즈에서 엑셀 파일을 업로드하고 구문 분석하려면 어떻게 해야 합니까? (0) | 2023.09.02 |
| CSS 유사 클래스 입력: not(사용 안 함) not:[type="cisco"]: 추가 (0) | 2023.09.02 |
| 내부자를 보내려면 어떻게 해야 합니까?내부자를 보내려면 어떻게 해야 합니까?부모의 밑바닥까지부모의 밑바닥까지? (0) | 2023.09.02 |
| Android에서 특정 Wi-Fi 네트워크에 프로그래밍 방식으로 연결하려면 어떻게 해야 합니까? (0) | 2023.09.02 |


