2011-08-13 3 views
3

저는 Razor 프로젝트에서 작업 중이며 기존 사용자 데이터베이스를 SimpleMembership Provider DB 스키마에 통합해야합니다. 이 작업은 기존 User 테이블을 지정하고 SimpleMembership API에서 Username 및 UserID로 사용할 열을 지정하여 수행됩니다. 하지만 과정에서 WebSecurity.ChangePassword()를 실패로 만들 수있는 이유는 무엇입니까?

WebSecurity.InitializeDatabaseConnection("DB_ConnStr", "User", "UserId", "Username", true); 

, 내 기존 데이터베이스의 각 사용자 행에 대한 새로운 기록으로 webpages_Membership 테이블을 채우기입니다. 이것은 정상적으로 진행되었으며 각 기존 사용자에 대한 삽입을 처리하는 코드를 작성했습니다.

삽입하는 동안 나는 단순화를 위해 더미 암호화 된 암호 토큰을 사용하고 모든 사람이 동일하게 암호를 설정합니다. 그런 다음 webpages_Membership 테이블의 각 사용자에 대해 올바른 비밀번호를 설정하기 위해 레코드를 통해 다른 스크립트를 실행해야합니다. 이는 기존의 사용자 테이블에서 현재 암호를 해독 한 다음 호출이 포함됩니다 :

WebSecurity.ChangePassword(username, dummyPwd, newPwd) 

을 각 사용자에서 'NEWPWD'매개 변수로 해독 현재 암호를 전달합니다.

이것은 10 만 건이 넘는 레코드의 경우 99 %의 경우에 잘 작동합니다. 그러나 약 40 건의 사례에서 실패하고있다.

이 방법이 실패하는 데는 어떤 이유가있을 수 있습니까?

답변

0

내 첫 번째 추측은 새 암호의 해시가 128 자 제한을 초과 할 수 있습니다.

ChangePassword 호출이 실패하면 예외의 원인을 알기 위해 예외를 잡을 수 있습니까?

+0

예외가 throw되지 않고 메서드는 단순히 false를 반환합니다. –

+0

소스 코드를 조금 더 살펴보면 또 다른 가능성은 사용자가 webpages_Membership 테이블에서 발견되지 않는다는 것입니다. 그걸 배제하자. 'WebSecurity.ChangePassword()'호출이 false를 반환하는 경우를 식별 할 수 있다면 관련 사용자 이름을 사용하고'Membership.GetUser (username)'이 null이 아닌 값을 반환하는지 확인할 수 있습니까? –

관련 문제