StarterSite密码重置页面修改不顺利

时间:2014-06-11 19:47:34

标签: c# asp.net-mvc email

专栏"电子邮件"在db startersite中不用于电子邮件,而是用于"个人号码" (最好离开的原因)。我已经为电子邮件添加了另一个专栏,名为" Courriel" (法语电子邮件)

现在的问题是,如果有人输入他的#34;个人号码"要更改密码,我的网站会尝试向此号码发送电子邮件,当然这是失败的(因为它不是有效的电子邮件地址)。

我希望密码重置页面能够验证"个人号码"并自动发送电子邮件到" Courriel"中的电子邮件地址。数据库的列。

这是我到目前为止所做的:

bool passwordSent = false;
var resetToken = "";
var email = Request.Form["email"] ?? Request.QueryString["email"];

Validation.RequireField("email", "Le champ numéro est obligatoire.");

if (IsPost) {
    AntiForgery.Validate();
    bool isValid = true;
    if (Validation.IsValid()) {
        if (WebSecurity.GetUserId(email) > -1 && WebSecurity.IsConfirmed(email)) {
            resetToken = WebSecurity.GeneratePasswordResetToken(email); // Indiquez une date d'expiration pour le jeton (facultatif)
        } else {
            passwordSent = true;
            isValid = false;
        }
    }
    if (isValid) {
        var hostUrl = Request.Url.GetComponents(UriComponents.SchemeAndServer, UriFormat.Unescaped);
        var resetUrl = "http://xx.xx.xx.xx" + VirtualPathUtility.ToAbsolute("~/Account/PasswordReset?resetToken=" + HttpUtility.UrlEncode(resetToken));
        var db = Database.Open("StarterSite");
        var sqlquery = "SELECT Courriel FROM UserProfile WHERE email = @0";
        var mail = db.Query(sqlquery,WebSecurity.GetUserId(email));

        WebMail.Send(
            to: mail,
            subject: "Réinitialisation de votre mot de passe", 
            body: "Utilisez ce jeton pour réinitialiser votre mot de passe : " + resetToken + @". Accédez à la page <a href=""" + HttpUtility.HtmlAttributeEncode(resetUrl) + @""">" + resetUrl + "</a> pour réinitialiser votre mot de passe."
        );
        passwordSent = true;
    }
}

我也尝试过以下方法,但它仍无法正常工作:

    if (isValid) {
        var hostUrl = Request.Url.GetComponents(UriComponents.SchemeAndServer, UriFormat.Unescaped);
        var resetUrl = "http://69.70.9.54" + VirtualPathUtility.ToAbsolute("~/Account/PasswordReset?resetToken=" + HttpUtility.UrlEncode(resetToken));
        var db = Database.Open("StarterSite");
        var sqlquery = "SELECT Courriel FROM UserProfile WHERE Email = @0";
        Courriel = db.QueryValue(sqlquery,WebSecurity.CurrentUserName);

我收到此错误

  

描述:执行期间发生了未处理的异常   当前的网络请求。请查看堆栈跟踪了解更多信息   有关错误的信息以及它在代码中的起源。

     

异常详细信息:System.InvalidOperationException:收件人必须   指定。

如果有人可以给我一个快速提示,那将是非常好的。

1 个答案:

答案 0 :(得分:0)

是的,我今天早上醒来时提出了一个想法...而不是引用电子邮件= @ 0我将它提到UserId = @ 0然后我将QueryValue更改为Websecurity.GetUserId = D它可以工作

        var db = Database.Open("StarterSite");
        var sqlquery = "SELECT Courriel FROM UserProfile WHERE UserId = @0";
        Courriel = db.QueryValue(sqlquery,WebSecurity.GetUserId(email));