Wir haben die Anforderung, dass, wenn ein Benutzer sein Passwort vergessen hat, er ein Passwort vergessen per E-Mail anfordern und empfangen sollte, um sein Passwort zurückzusetzen.Warum funktioniert mein Datumsvergleich nicht?
Ich verwende einen Datum-Zeit-Vergleich mit einem Token in Form eines eindeutigen Codes, um ein gewisses Maß an Sicherheit zu gewährleisten.
Sobald sie einen E-Mail-Link zum Zurücksetzen des Passworts erhalten und der Benutzer auf den Link zum Zurücksetzen des Passworts klickt, wird dem Benutzer ein Bildschirm zum Zurücksetzen des Passworts angezeigt. Das funktioniert bisher großartig.
Worauf ich Probleme habe ist, wenn ein Benutzer auf den E-Mail-Link klickt, um sein Passwort mehr als 24 Stunden nach der E-Mail mit dem Link zurückzusetzen, erhalten sie eine leere Seite.
Wir möchten, dass der Benutzer eine Seite erhält, die besagt, Passwort zurücksetzen Link ist abgelaufen. Es war einmal nur, aber diese Nachricht ist nicht sichtbar.
Was mache ich falsch?
Unten ist der Code ich verwende:
If dr.HasRows Then
Dim dtCreate As DateTime = DateTime.Now
Dim dtNow As DateTime = DateTime.Now
Dim dtExp As DateTime = dtCreate.AddDays(1)
If dtNow > dtExp Then
ResetPwdPanel.Visible = False
Expired.Visible = True
Else
ResetPwdPanel.Visible = True
Expired.Visible = False
lblExpired.Text = "Reset password link has expired. It was for one time use only"
Return
End If
End If
‚Markup:
<form id="form1" runat="server">
<div>
<asp:Panel ID="ResetPwdPanel" runat="server" Visible="false" >
<fieldset style="width:400px">
<legend>Reset Password</legend>
<table>
<tr>
<td>New password: </td><td>
<div class="input text">
<asp:TextBox ID="txtNewPwd" style="width:150px;" TextMode="Password" runat="server"></asp:TextBox></div><br />
<asp:RequiredFieldValidator ID="rfvNewPwd" runat="server"
ControlToValidate="txtNewPwd" Display="Dynamic"
ErrorMessage="Please enter new password" ForeColor="Red" SetFocusOnError="True"></asp:RequiredFieldValidator>
</td>
</tr>
<tr>
<td>Confirm Passsword: </td><td>
<div class="input text">
<asp:TextBox ID="txtConfirmPwd" style="width:150px;" TextMode="Password" runat="server"></asp:TextBox></div><br />
<asp:RequiredFieldValidator ID="rfvConfirmPwd" runat="server"
ControlToValidate="txtConfirmPwd" Display="Dynamic"
ErrorMessage="Please re-enter password to confirm" ForeColor="Red"
SetFocusOnError="True"></asp:RequiredFieldValidator>
<asp:CompareValidator ID="cmvConfirmPwd" runat="server"
ControlToCompare="txtNewPwd" ControlToValidate="txtConfirmPwd"
Display="Dynamic" ErrorMessage="Password didn't match" ForeColor="Red"
SetFocusOnError="True"></asp:CompareValidator>
</td>
</tr>
<tr>
<td>
</td><td>
<asp:Button ID="btnChangePwd" runat="server" Text="Change Password"
onclick="btnChangePwd_Click" /></td>
</tr>
<tr>
<td colspan="2">
<asp:Label ID="lblStatus" runat="server" Text=""></asp:Label>
</td>
</tr>
</table>
</fieldset>
</asp:Panel>
<asp:panel ID="Expired" runat="server">
<asp:Label ID="lblExpired" runat="server" Text="" style="color: #FF0000"></asp:Label></asp:panel>
Wir haben zwei Bedienelemente. Eine, die Reset-Passwort-Kontrollen zeigt (funktioniert), während die andere zeigt die Reset-Passwort-Link-Ablaufmeldung (das funktioniert nicht).
ein leerer Bildschirm ist nicht sehr hilfreich. Da gibt es immer mehr Informationen. In IIS-Protokollierung, F12-Tools, interaktives Debugging. Machen Sie den ersten Schritt zur Lösung Ihres Problems und sehen Sie sich das Ergebnis des leeren Bildschirms an. –
@Tairoc: Es kann hilfreich sein, wenn Sie ein Snippet der ASPX-Datei hinzugefügt haben, das das Markup für Ihre Panels und deren übergeordnete Steuerelemente anzeigt. Mit "leere Seite" meinst du auch einen weißen Bildschirm ohne irgendeinen * Inhalt, oder meinst du nur, dass die Ablaufmeldung nicht sichtbar ist? –
'dtNow> dtExp' kann niemals basierend auf Ihrem Code wahr sein –