2014-12-02 3 views
14

VSC 템플릿에서 코드를 복사하여 MVC 애플리케이션에 ASP.NET ID를 구현했습니다. 기본적으로 작동하지만 재설정 암호를 사용할 수 없습니다. "비밀번호 찾기"페이지를 표시하면 토큰이 포함 된 이메일이 생성됩니다. 이 토큰은 다음과 같은 방법으로 반환됩니다.토큰이 ASP.NET ID로 비밀번호 재설정시 유효하지 않습니다.

링크를 클릭하면 비밀번호 재설정 양식이 열리 며 사용자가 이메일 주소와 새 비밀번호를 입력 할 수 있습니다. 그런 다음 암호 변경 기능에 대한 호출이 이루어집니다

UserManager.ResetPasswordAsync(user.Id, model.Code, model.Password); 

이 나에게 좋아 보인다,하지만 결과는 항상 "잘못된 토큰"이며, 즉 왜하지 않습니다.

아무도 왜 작동하지 않는지 알고 있나요? 그리고 토큰은 어디에 저장되어 있습니까? 나는 (그것을 ASP.NET 정체성에 UserManager에 의해 생성 된 토큰은 일반적으로 쿼리 문자열로 전달하는 경우는 ""로 변경하기 "+"문자가 포함

답변

23

... 어딘가에 AspNetUsers 테이블 주위 데이터베이스에 있어야합니다 생각 공백). 당신의 ResetPassword ActionResult에서이 같은 "+"와 "을"대체 : 트릭을 할해야

var code = model.Code.Replace(" ", "+"); 
//And then change the following line 
UserManager.ResetPasswordAsync(user.Id, model.Code, model.Password); 
//To this one so it uses the code(spaces replaced with "+") instead of model.Code 
UserManager.ResetPasswordAsync(user.Id, code, model.Password); 

합니다. 동일한 문제가있어서 대답은 here입니다.

+2

다른 답변에 설명 된대로 UrlEncode/Decode가 작동하지 않을 때이 기능이 작동했습니다. –

+1

나는 Adrian을 위해서 일해서 기뻐요 :) – Mansoor

+0

나는 똑같은 문제를 코드에서 마지막으로 '=='처리 할 수 ​​있습니다. 그래서 어떻게 처리 할 수 ​​있습니까? 코드가 메일과 인스턴트 메신저에서도 쿼리 문자열을 통해 전송됩니다. 메일에서이 WebUtility.UrlEncode (코드)를 보내고 WebUtility.UrDecode (Model.code)를 사용하여 시간을 가져오고이 코드를 사용하여 여전히 문제가 발생하고 유효하지 않은 토큰을 가져 오는 것을 끝내십시오. – coderwill

24

HTML 인코딩/디코딩 이외의 가장 일반적인 문제는 데이터베이스의 사용자 항목에 SecurityStamp가 누락되었다는 것입니다. ASP.NET Identity에는 토큰을 만들 때 한 기능이 null로 설정하는 반면, 토큰의 유효성을 검사 할 때 빈 문자열을 검사하는 버그가 있습니다.

SecurityStamp가 null이거나 빈 문자열이면 잘못된 토큰 문제가 발생합니다.

+1

이것은 제 문제였습니다 - 많은 감사합니다! –

+1

이것은 또한 내 문제였습니다. 난 그냥 임의의 문자열로 nulls를 업데이 트하고 그걸로 행복하게 보였다! 많은 맹세와 분노가 확산되었습니다. 나는 네 빚에 빠져있어. – Shawson

+1

대단히 감사합니다 !!! –

0

내 경우에는 데이터베이스의 데이터를 다른 데이터베이스에서 잘못 가져 왔기 때문입니다. SecurityStamp 필드가 null이므로 유효하지 않은 토큰 오류가 발생했습니다.

+0

그리고 어떻게 해결 했습니까? – Richard77

+0

은 특정 테이블에 대한 데이터 가져 오기를 제거하고 UserManager를 사용하여 이전 데이터베이스에서 사용자를 생성합니다. –

+0

말 그대로 내 대답의 복제본입니다 ... –

관련 문제