asp.net身份 - 传递给查看令牌更改的GeneratePasswordResetTokenAsync方法?

时间:2014-12-16 10:56:18

标签: asp.net asp.net-mvc razor asp.net-identity

当我使用usermanager生成密码重置令牌时,一旦将其传递给剃刀视图,令牌就会发生变化。

一个例子是:

 var resetToken = await userManager.GeneratePasswordResetTokenAsync(userId);

            if (registerSuccess)
            {
                var model = new ResetModel { Token = resetToken, UserId = userId };               
                return this.View(model);          
            }  

我可以在调试时看到重置令牌的值是

AQAAANCMnd8BFdERjHoAwE / CL + sBAAAAmfrU4hd3Q0WLiANC7DsekQAAAAACAAAAAAADZgAAwAAAABAAAAB1Q / FgOVgsh + 0SsLLYSKrFAAAAAASAAACgAAAAEAAAAFMVfXSy24PLGHSoIqFO / YRAAAAAYll / 7E8QwrH5JEfhMKGVHNe4CZM3TFWVL4lRE7Jhm / I6CKkTdloHofac054Ergy7BtwtV9OM7ila3f / ti90iDBQAAABAfR8pdGZ2eBXq / sGw0qVP6PQlWg ==

但是一旦在视图上呈现它已经变为

AQAAANCMnd8BFdERjHoAwE / CL + sBAAAAmfrU4hd3Q0WLiANC7DsekQAAAAACAAAAAAADZgAAwAAAABAAAACDU0qQzkc65kQa58ift5NBAAAAAASAAACgAAAAEAAAAGGy5Flp6xtR7cGZkvRoNNpAAAAAha1iP7uXqD6KSKbWBOfdXM1KaZnOekiYTSad6 / zkejoCk5cDd1FK / JdxKS0Rx9rHeqTJpZkzeEmh5HI3 // cLixQAAAAJFOivgVuhoOXTMZMeY + AlLzmifQ ==

视图代码如下:

 @Html.HiddenFor(x => x.Token)

我完全失去了什么。有谁知道发生了什么?为什么令牌在渲染到视图后会发生变化?

1 个答案:

答案 0 :(得分:2)

如果将令牌传递给网址,则需要为令牌添加Url-Encoding:

var resetToken = await userManager.GeneratePasswordResetTokenAsync(userId);
resetToken = System.Web.HttpUtility.UrlEncode(resetToken);

否则浏览器会混淆令牌中可能出现的特殊符号。

如果您在视图中打印,则需要通过Html.Raw关闭HtmlEncoding:

<input type="hidden" value="@Html.Raw(Model.Token)" name="Token" />