Update 07082021

This commit is contained in:
2021-08-07 09:44:37 +02:00
parent 1ff218a129
commit 4d443fdfd4
5663 changed files with 6581858 additions and 1321 deletions

View File

@@ -0,0 +1,28 @@
<%@ Page Title="Telefonnummer" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeBehind="AddPhoneNumber.aspx.cs" Inherits="WebFormApp.Account.AddPhoneNumber" %>
<asp:Content ID="BodyContent" ContentPlaceHolderID="MainContent" runat="server">
<h2><%: Title %>.</h2>
<div class="form-horizontal">
<h4>Telefonnummer hinzufügen</h4>
<hr />
<asp:ValidationSummary runat="server" CssClass="text-danger" />
<p class="text-danger">
<asp:Literal runat="server" ID="ErrorMessage" />
</p>
<div class="form-group">
<asp:Label runat="server" AssociatedControlID="PhoneNumber" CssClass="col-md-2 control-label">Telefonnummer</asp:Label>
<div class="col-md-10">
<asp:TextBox runat="server" ID="PhoneNumber" CssClass="form-control" TextMode="Phone" />
<asp:RequiredFieldValidator runat="server" ControlToValidate="PhoneNumber"
CssClass="text-danger" ErrorMessage="Das Feld quot;PhoneNumber&quot; ist erforderlich." />
</div>
</div>
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<asp:Button runat="server" OnClick="PhoneNumber_Click"
Text="Absenden" CssClass="btn btn-default" />
</div>
</div>
</div>
</asp:Content>

View File

@@ -0,0 +1,34 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Microsoft.AspNet.Identity;
using Microsoft.AspNet.Identity.Owin;
using System.Threading.Tasks;
using WebFormApp.Models;
namespace WebFormApp.Account
{
public partial class AddPhoneNumber : System.Web.UI.Page
{
protected void PhoneNumber_Click(object sender, EventArgs e)
{
var manager = Context.GetOwinContext().GetUserManager<ApplicationUserManager>();
var code = manager.GenerateChangePhoneNumberToken(User.Identity.GetUserId(), PhoneNumber.Text);
if (manager.SmsService != null)
{
var message = new IdentityMessage
{
Destination = PhoneNumber.Text,
Body = "Ihr Sicherheitscode lautet " + code
};
manager.SmsService.Send(message);
}
Response.Redirect("/Account/VerifyPhoneNumber?PhoneNumber=" + HttpUtility.UrlEncode(PhoneNumber.Text));
}
}
}

View File

@@ -0,0 +1,33 @@
//------------------------------------------------------------------------------
// <auto-generated>
// Dieser Code wurde von einem Tool generiert.
//
// Änderungen an dieser Datei können fehlerhaftes Verhalten verursachen und gehen verloren, wenn
// der Code neu generiert wird.
// </auto-generated>
//------------------------------------------------------------------------------
namespace WebFormApp.Account {
public partial class AddPhoneNumber {
/// <summary>
/// ErrorMessage-Steuerelement
/// </summary>
/// <remarks>
/// Automatisch generiertes Feld.
/// Zum Ändern die Felddeklaration aus der Designerdatei in die CodeBehind-Datei verschieben.
/// </remarks>
protected global::System.Web.UI.WebControls.Literal ErrorMessage;
/// <summary>
/// PhoneNumber-Steuerelement
/// </summary>
/// <remarks>
/// Automatisch generiertes Feld.
/// Zum Ändern die Felddeklaration aus der Designerdatei in die CodeBehind-Datei verschieben.
/// </remarks>
protected global::System.Web.UI.WebControls.TextBox PhoneNumber;
}
}

View File

@@ -0,0 +1,18 @@
<%@ Page Title="Kontobestätigung" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeBehind="Confirm.aspx.cs" Inherits="WebFormApp.Account.Confirm" Async="true" %>
<asp:Content runat="server" ID="BodyContent" ContentPlaceHolderID="MainContent">
<h2><%: Title %>.</h2>
<div>
<asp:PlaceHolder runat="server" ID="successPanel" ViewStateMode="Disabled" Visible="true">
<p>
Danke, dass Sie Ihr Kennwort bestätigt haben. Klicken Sie <asp:HyperLink ID="login" runat="server" NavigateUrl="~/Account/Login">hier</asp:HyperLink> um sich anzumelden.
</p>
</asp:PlaceHolder>
<asp:PlaceHolder runat="server" ID="errorPanel" ViewStateMode="Disabled" Visible="false">
<p class="text-danger">
Fehler
</p>
</asp:PlaceHolder>
</div>
</asp:Content>

View File

@@ -0,0 +1,37 @@
using System;
using System.Web;
using System.Web.UI;
using Microsoft.AspNet.Identity;
using Microsoft.AspNet.Identity.Owin;
using Owin;
using WebFormApp.Models;
namespace WebFormApp.Account
{
public partial class Confirm : Page
{
protected string StatusMessage
{
get;
private set;
}
protected void Page_Load(object sender, EventArgs e)
{
string code = IdentityHelper.GetCodeFromRequest(Request);
string userId = IdentityHelper.GetUserIdFromRequest(Request);
if (code != null && userId != null)
{
var manager = Context.GetOwinContext().GetUserManager<ApplicationUserManager>();
var result = manager.ConfirmEmail(userId, code);
if (result.Succeeded)
{
successPanel.Visible = true;
return;
}
}
successPanel.Visible = false;
errorPanel.Visible = true;
}
}
}

View File

@@ -0,0 +1,43 @@
//------------------------------------------------------------------------------
// <auto-generated>
// Dieser Code wurde von einem Tool generiert.
//
// Änderungen an dieser Datei können fehlerhaftes Verhalten verursachen und gehen verloren, wenn
// der Code neu generiert wird.
// </auto-generated>
//------------------------------------------------------------------------------
namespace WebFormApp.Account {
public partial class Confirm {
/// <summary>
/// successPanel-Steuerelement
/// </summary>
/// <remarks>
/// Automatisch generiertes Feld.
/// Zum Ändern die Felddeklaration aus der Designerdatei in die CodeBehind-Datei verschieben.
/// </remarks>
protected global::System.Web.UI.WebControls.PlaceHolder successPanel;
/// <summary>
/// login-Steuerelement
/// </summary>
/// <remarks>
/// Automatisch generiertes Feld.
/// Zum Ändern die Felddeklaration aus der Designerdatei in die CodeBehind-Datei verschieben.
/// </remarks>
protected global::System.Web.UI.WebControls.HyperLink login;
/// <summary>
/// errorPanel-Steuerelement
/// </summary>
/// <remarks>
/// Automatisch generiertes Feld.
/// Zum Ändern die Felddeklaration aus der Designerdatei in die CodeBehind-Datei verschieben.
/// </remarks>
protected global::System.Web.UI.WebControls.PlaceHolder errorPanel;
}
}

View File

@@ -0,0 +1,39 @@
<%@ Page Title="Kennwort vergessen" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeBehind="Forgot.aspx.cs" Inherits="WebFormApp.Account.ForgotPassword" Async="true" %>
<asp:Content runat="server" ID="BodyContent" ContentPlaceHolderID="MainContent">
<h2><%: Title %>.</h2>
<div class="row">
<div class="col-md-8">
<asp:PlaceHolder id="loginForm" runat="server">
<div class="form-horizontal">
<h4>Kennwort vergessen?</h4>
<hr />
<asp:PlaceHolder runat="server" ID="ErrorMessage" Visible="false">
<p class="text-danger">
<asp:Literal runat="server" ID="FailureText" />
</p>
</asp:PlaceHolder>
<div class="form-group">
<asp:Label runat="server" AssociatedControlID="Email" CssClass="col-md-2 control-label">E-Mail</asp:Label>
<div class="col-md-10">
<asp:TextBox runat="server" ID="Email" CssClass="form-control" TextMode="Email" />
<asp:RequiredFieldValidator runat="server" ControlToValidate="Email"
CssClass="text-danger" ErrorMessage="Das E-Mail-Feld ist erforderlich." />
</div>
</div>
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<asp:Button runat="server" OnClick="Forgot" Text="E-Mail-Link" CssClass="btn btn-default" />
</div>
</div>
</div>
</asp:PlaceHolder>
<asp:PlaceHolder runat="server" ID="DisplayEmail" Visible="false">
<p class="text-info">
Bitte überprüfen Sie Ihre E-Mail, um das Kennwort zurückzusetzen.
</p>
</asp:PlaceHolder>
</div>
</div>
</asp:Content>

View File

@@ -0,0 +1,40 @@
using System;
using System.Web;
using System.Web.UI;
using Microsoft.AspNet.Identity;
using Microsoft.AspNet.Identity.Owin;
using Owin;
using WebFormApp.Models;
namespace WebFormApp.Account
{
public partial class ForgotPassword : Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void Forgot(object sender, EventArgs e)
{
if (IsValid)
{
// E-Mail-Adresse des Benutzers überprüfen
var manager = Context.GetOwinContext().GetUserManager<ApplicationUserManager>();
ApplicationUser user = manager.FindByName(Email.Text);
if (user == null || !manager.IsEmailConfirmed(user.Id))
{
FailureText.Text = "Der Benutzer ist nicht vorhanden oder wurde nicht bestätigt.";
ErrorMessage.Visible = true;
return;
}
// Weitere Informationen zum Aktivieren der Kontobestätigung und Kennwortzurücksetzung finden Sie unter https://go.microsoft.com/fwlink/?LinkID=320771
// E-Mail mit dem Code und die Umleitung zur Seite zum Zurücksetzen des Kennworts senden
//string code = manager.GeneratePasswordResetToken(user.Id);
//string callbackUrl = IdentityHelper.GetResetPasswordRedirectUrl(code, Request);
//manager.SendEmail(user.Id, "Kennwort zurücksetzen", "Bitte setzen Sie Ihr Kennwort zurück. Klicken Sie dazu <a href=\"" + callbackUrl + "\">hier</a>.");
loginForm.Visible = false;
DisplayEmail.Visible = true;
}
}
}
}

View File

@@ -0,0 +1,60 @@
//------------------------------------------------------------------------------
// <auto-generated>
// Dieser Code wurde von einem Tool generiert.
//
// Änderungen an dieser Datei können fehlerhaftes Verhalten verursachen und gehen verloren, wenn
// der Code neu generiert wird.
// </auto-generated>
//------------------------------------------------------------------------------
namespace WebFormApp.Account {
public partial class ForgotPassword {
/// <summary>
/// loginForm-Steuerelement
/// </summary>
/// <remarks>
/// Automatisch generiertes Feld.
/// Zum Ändern die Felddeklaration aus der Designerdatei in die CodeBehind-Datei verschieben.
/// </remarks>
protected global::System.Web.UI.WebControls.PlaceHolder loginForm;
/// <summary>
/// ErrorMessage-Steuerelement
/// </summary>
/// <remarks>
/// Automatisch generiertes Feld.
/// Zum Ändern die Felddeklaration aus der Designerdatei in die CodeBehind-Datei verschieben.
/// </remarks>
protected global::System.Web.UI.WebControls.PlaceHolder ErrorMessage;
/// <summary>
/// FailureText-Steuerelement
/// </summary>
/// <remarks>
/// Automatisch generiertes Feld.
/// Zum Ändern die Felddeklaration aus der Designerdatei in die CodeBehind-Datei verschieben.
/// </remarks>
protected global::System.Web.UI.WebControls.Literal FailureText;
/// <summary>
/// Email-Steuerelement
/// </summary>
/// <remarks>
/// Automatisch generiertes Feld.
/// Zum Ändern die Felddeklaration aus der Designerdatei in die CodeBehind-Datei verschieben.
/// </remarks>
protected global::System.Web.UI.WebControls.TextBox Email;
/// <summary>
/// DisplayEmail-Steuerelement
/// </summary>
/// <remarks>
/// Automatisch generiertes Feld.
/// Zum Ändern die Felddeklaration aus der Designerdatei in die CodeBehind-Datei verschieben.
/// </remarks>
protected global::System.Web.UI.WebControls.PlaceHolder DisplayEmail;
}
}

View File

@@ -0,0 +1,8 @@
<%@ Page Title="" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeBehind="Lockout.aspx.cs" Inherits="WebFormApp.Account.Lockout" %>
<asp:Content ID="BodyContent" ContentPlaceHolderID="MainContent" runat="server">
<hgroup>
<h1>Gesperrt</h1>
<h2 class="text-danger">Dieses Konto wurde gesperrt. Bitte versuchen Sie es später erneut.</h2>
</hgroup>
</asp:Content>

View File

@@ -0,0 +1,17 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace WebFormApp.Account
{
public partial class Lockout : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
}
}

View File

@@ -0,0 +1,17 @@
//------------------------------------------------------------------------------
// <auto-generated>
// Dieser Code wurde von einem Tool generiert.
//
// Änderungen an dieser Datei können fehlerhaftes Verhalten verursachen und gehen verloren, wenn
// der Code neu generiert wird.
// </auto-generated>
//------------------------------------------------------------------------------
namespace WebFormApp.Account
{
public partial class Lockout
{
}
}

View File

@@ -0,0 +1,65 @@
<%@ Page Title="Anmelden" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeBehind="Login.aspx.cs" Inherits="WebFormApp.Account.Login" Async="true" %>
<%@ Register Src="~/Account/OpenAuthProviders.ascx" TagPrefix="uc" TagName="OpenAuthProviders" %>
<asp:Content runat="server" ID="BodyContent" ContentPlaceHolderID="MainContent">
<h2><%: Title %>.</h2>
<div class="row">
<div class="col-md-8">
<section id="loginForm">
<div class="form-horizontal">
<h4>Lokales Konto für die Anmeldung verwenden.</h4>
<hr />
<asp:PlaceHolder runat="server" ID="ErrorMessage" Visible="false">
<p class="text-danger">
<asp:Literal runat="server" ID="FailureText" />
</p>
</asp:PlaceHolder>
<div class="form-group">
<asp:Label runat="server" AssociatedControlID="Email" CssClass="col-md-2 control-label">E-Mail</asp:Label>
<div class="col-md-10">
<asp:TextBox runat="server" ID="Email" CssClass="form-control" TextMode="Email" />
<asp:RequiredFieldValidator runat="server" ControlToValidate="Email"
CssClass="text-danger" ErrorMessage="Das E-Mail-Feld ist erforderlich." />
</div>
</div>
<div class="form-group">
<asp:Label runat="server" AssociatedControlID="Password" CssClass="col-md-2 control-label">Kennwort</asp:Label>
<div class="col-md-10">
<asp:TextBox runat="server" ID="Password" TextMode="Password" CssClass="form-control" />
<asp:RequiredFieldValidator runat="server" ControlToValidate="Password" CssClass="text-danger" ErrorMessage="Das Kennwortfeld ist erforderlich." />
</div>
</div>
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<div class="checkbox">
<asp:CheckBox runat="server" ID="RememberMe" />
<asp:Label runat="server" AssociatedControlID="RememberMe">Speichern?</asp:Label>
</div>
</div>
</div>
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<asp:Button runat="server" OnClick="LogIn" Text="Anmelden" CssClass="btn btn-default" />
</div>
</div>
</div>
<p>
<asp:HyperLink runat="server" ID="RegisterHyperLink" ViewStateMode="Disabled">Als neuer Benutzer registrieren</asp:HyperLink>
</p>
<p>
<%-- Enable this once you have account confirmation enabled for password reset functionality
<asp:HyperLink runat="server" ID="ForgotPasswordHyperLink" ViewStateMode="Disabled">Forgot your password?</asp:HyperLink>
--%>
</p>
</section>
</div>
<div class="col-md-4">
<section id="socialLoginForm">
<uc:OpenAuthProviders runat="server" ID="OpenAuthLogin" />
</section>
</div>
</div>
</asp:Content>

View File

@@ -0,0 +1,61 @@
using System;
using System.Web;
using System.Web.UI;
using Microsoft.AspNet.Identity;
using Microsoft.AspNet.Identity.Owin;
using Owin;
using WebFormApp.Models;
namespace WebFormApp.Account
{
public partial class Login : Page
{
protected void Page_Load(object sender, EventArgs e)
{
RegisterHyperLink.NavigateUrl = "Register";
// Diese Option aktivieren, nachdem Sie die Kontobestätigung für die Funktion zum Zurücksetzen des Kennworts aktiviert haben
//ForgotPasswordHyperLink.NavigateUrl = "Forgot";
OpenAuthLogin.ReturnUrl = Request.QueryString["ReturnUrl"];
var returnUrl = HttpUtility.UrlEncode(Request.QueryString["ReturnUrl"]);
if (!String.IsNullOrEmpty(returnUrl))
{
RegisterHyperLink.NavigateUrl += "?ReturnUrl=" + returnUrl;
}
}
protected void LogIn(object sender, EventArgs e)
{
if (IsValid)
{
// Benutzerkennwort überprüfen
var manager = Context.GetOwinContext().GetUserManager<ApplicationUserManager>();
var signinManager = Context.GetOwinContext().GetUserManager<ApplicationSignInManager>();
// Anmeldefehler werden bezüglich einer Kontosperre nicht gezählt.
// Wenn Sie aktivieren möchten, dass Kennwortfehler eine Sperre auslösen, ändern Sie in "shouldLockout: true".
var result = signinManager.PasswordSignIn(Email.Text, Password.Text, RememberMe.Checked, shouldLockout: false);
switch (result)
{
case SignInStatus.Success:
IdentityHelper.RedirectToReturnUrl(Request.QueryString["ReturnUrl"], Response);
break;
case SignInStatus.LockedOut:
Response.Redirect("/Account/Lockout");
break;
case SignInStatus.RequiresVerification:
Response.Redirect(String.Format("/Account/TwoFactorAuthenticationSignIn?ReturnUrl={0}&RememberMe={1}",
Request.QueryString["ReturnUrl"],
RememberMe.Checked),
true);
break;
case SignInStatus.Failure:
default:
FailureText.Text = "Ungültiger Anmeldeversuch.";
ErrorMessage.Visible = true;
break;
}
}
}
}
}

View File

@@ -0,0 +1,78 @@
//------------------------------------------------------------------------------
// <auto-generated>
// Dieser Code wurde von einem Tool generiert.
//
// Änderungen an dieser Datei können fehlerhaftes Verhalten verursachen und gehen verloren, wenn
// der Code wird erneut generiert.
// </auto-generated>
//------------------------------------------------------------------------------
namespace WebFormApp.Account {
public partial class Login {
/// <summary>
/// ErrorMessage-Steuerelement
/// </summary>
/// <remarks>
/// Automatisch generiertes Feld.
/// Zum Ändern die Felddeklaration aus der Designerdatei in die CodeBehind-Datei verschieben.
/// </remarks>
protected global::System.Web.UI.WebControls.PlaceHolder ErrorMessage;
/// <summary>
/// FailureText-Steuerelement
/// </summary>
/// <remarks>
/// Automatisch generiertes Feld.
/// Zum Ändern die Felddeklaration aus der Designerdatei in die CodeBehind-Datei verschieben.
/// </remarks>
protected global::System.Web.UI.WebControls.Literal FailureText;
/// <summary>
/// Email-Steuerelement
/// </summary>
/// <remarks>
/// Automatisch generiertes Feld.
/// Zum Ändern die Felddeklaration aus der Designerdatei in die CodeBehind-Datei verschieben.
/// </remarks>
protected global::System.Web.UI.WebControls.TextBox Email;
/// <summary>
/// Password-Steuerelement
/// </summary>
/// <remarks>
/// Automatisch generiertes Feld.
/// Zum Ändern die Felddeklaration aus der Designerdatei in die CodeBehind-Datei verschieben.
/// </remarks>
protected global::System.Web.UI.WebControls.TextBox Password;
/// <summary>
/// RememberMe-Steuerelement
/// </summary>
/// <remarks>
/// Automatisch generiertes Feld.
/// Zum Ändern die Felddeklaration aus der Designerdatei in die CodeBehind-Datei verschieben.
/// </remarks>
protected global::System.Web.UI.WebControls.CheckBox RememberMe;
/// <summary>
/// RegisterHyperLink-Steuerelement
/// </summary>
/// <remarks>
/// Automatisch generiertes Feld.
/// Zum Ändern die Felddeklaration aus der Designerdatei in die CodeBehind-Datei verschieben.
/// </remarks>
protected global::System.Web.UI.WebControls.HyperLink RegisterHyperLink;
/// <summary>
/// OpenAuthLogin-Steuerelement
/// </summary>
/// <remarks>
/// Automatisch generiertes Feld.
/// Zum Ändern die Felddeklaration aus der Designerdatei in die CodeBehind-Datei verschieben.
/// </remarks>
protected global::WebFormApp.Account.OpenAuthProviders OpenAuthLogin;
}
}

View File

@@ -0,0 +1,80 @@
<%@ Page Title="Konto verwalten" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeBehind="Manage.aspx.cs" Inherits="WebFormApp.Account.Manage" %>
<%@ Register Src="~/Account/OpenAuthProviders.ascx" TagPrefix="uc" TagName="OpenAuthProviders" %>
<asp:Content ContentPlaceHolderID="MainContent" runat="server">
<h2><%: Title %>.</h2>
<div>
<asp:PlaceHolder runat="server" ID="successMessage" Visible="false" ViewStateMode="Disabled">
<p class="text-success"><%: SuccessMessage %></p>
</asp:PlaceHolder>
</div>
<div class="row">
<div class="col-md-12">
<div class="form-horizontal">
<h4>Kontoeinstellungen ändern</h4>
<hr />
<dl class="dl-horizontal">
<dt>Kennwort:</dt>
<dd>
<asp:HyperLink NavigateUrl="/Account/ManagePassword" Text="[Change]" Visible="false" ID="ChangePassword" runat="server" />
<asp:HyperLink NavigateUrl="/Account/ManagePassword" Text="[Create]" Visible="false" ID="CreatePassword" runat="server" />
</dd>
<dt>Externe Anmeldungen:</dt>
<dd><%: LoginsCount %>
<asp:HyperLink NavigateUrl="/Account/ManageLogins" Text="[Manage]" runat="server" />
</dd>
<%--
Phone Numbers can used as a second factor of verification in a two-factor authentication system.
See <a href="https://go.microsoft.com/fwlink/?LinkId=403804">this article</a>
for details on setting up this ASP.NET application to support two-factor authentication using SMS.
Uncomment the following blocks after you have set up two-factor authentication
--%>
<%--
<dt>Phone Number:</dt>
<% if (HasPhoneNumber)
{ %>
<dd>
<asp:HyperLink NavigateUrl="/Account/AddPhoneNumber" runat="server" Text="[Add]" />
</dd>
<% }
else
{ %>
<dd>
<asp:Label Text="" ID="PhoneNumber" runat="server" />
<asp:HyperLink NavigateUrl="/Account/AddPhoneNumber" runat="server" Text="[Change]" /> &nbsp;|&nbsp;
<asp:LinkButton Text="[Remove]" OnClick="RemovePhone_Click" runat="server" />
</dd>
<% } %>
--%>
<dt>Zweistufige Authentifizierung:</dt>
<dd>
<p>
Es sind keine Anbieter für zweistufige Authentifizierung konfiguriert. In <a href="https://go.microsoft.com/fwlink/?LinkId=403804">diesem Artikel</a>
finden Sie Details zum Einrichten dieser ASP.NET-Anwendung für die Unterstützung zweistufiger Authentifizierung.
</p>
<% if (TwoFactorEnabled)
{ %>
<%--
Enabled
<asp:LinkButton Text="[Disable]" runat="server" CommandArgument="false" OnClick="TwoFactorDisable_Click" />
--%>
<% }
else
{ %>
<%--
Disabled
<asp:LinkButton Text="[Enable]" CommandArgument="true" OnClick="TwoFactorEnable_Click" runat="server" />
--%>
<% } %>
</dd>
</dl>
</div>
</div>
</div>
</asp:Content>

View File

@@ -0,0 +1,128 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Web;
using Microsoft.AspNet.Identity;
using Microsoft.AspNet.Identity.EntityFramework;
using Microsoft.AspNet.Identity.Owin;
using Microsoft.Owin.Security;
using Owin;
using WebFormApp.Models;
namespace WebFormApp.Account
{
public partial class Manage : System.Web.UI.Page
{
protected string SuccessMessage
{
get;
private set;
}
private bool HasPassword(ApplicationUserManager manager)
{
return manager.HasPassword(User.Identity.GetUserId());
}
public bool HasPhoneNumber { get; private set; }
public bool TwoFactorEnabled { get; private set; }
public bool TwoFactorBrowserRemembered { get; private set; }
public int LoginsCount { get; set; }
protected void Page_Load()
{
var manager = Context.GetOwinContext().GetUserManager<ApplicationUserManager>();
HasPhoneNumber = String.IsNullOrEmpty(manager.GetPhoneNumber(User.Identity.GetUserId()));
// Option nach dem Einrichten der zweistufigen Authentifizierung aktivieren
//PhoneNumber.Text = manager.GetPhoneNumber(User.Identity.GetUserId()) ?? String.Empty;
TwoFactorEnabled = manager.GetTwoFactorEnabled(User.Identity.GetUserId());
LoginsCount = manager.GetLogins(User.Identity.GetUserId()).Count;
var authenticationManager = HttpContext.Current.GetOwinContext().Authentication;
if (!IsPostBack)
{
// Zu rendernde Abschnitte ermitteln
if (HasPassword(manager))
{
ChangePassword.Visible = true;
}
else
{
CreatePassword.Visible = true;
ChangePassword.Visible = false;
}
// Rendererfolgsmeldung
var message = Request.QueryString["m"];
if (message != null)
{
// Abfragezeichenfolge aus der Aktion entfernen
Form.Action = ResolveUrl("~/Account/Manage");
SuccessMessage =
message == "ChangePwdSuccess" ? "Ihr Kennwort wurde geändert."
: message == "SetPwdSuccess" ? "Ihr Kennwort wurde festgelegt."
: message == "RemoveLoginSuccess" ? "Das Konto wurde entfernt."
: message == "AddPhoneNumberSuccess" ? "Die Telefonnummer wurde hinzugefügt."
: message == "RemovePhoneNumberSuccess" ? "Die Telefonnummer wurde entfernt."
: String.Empty;
successMessage.Visible = !String.IsNullOrEmpty(SuccessMessage);
}
}
}
private void AddErrors(IdentityResult result)
{
foreach (var error in result.Errors)
{
ModelState.AddModelError("", error);
}
}
// Telefonnummer für Benutzer entfernen
protected void RemovePhone_Click(object sender, EventArgs e)
{
var manager = Context.GetOwinContext().GetUserManager<ApplicationUserManager>();
var signInManager = Context.GetOwinContext().Get<ApplicationSignInManager>();
var result = manager.SetPhoneNumber(User.Identity.GetUserId(), null);
if (!result.Succeeded)
{
return;
}
var user = manager.FindById(User.Identity.GetUserId());
if (user != null)
{
signInManager.SignIn(user, isPersistent: false, rememberBrowser: false);
Response.Redirect("/Account/Manage?m=RemovePhoneNumberSuccess");
}
}
// DisableTwoFactorAuthentication
protected void TwoFactorDisable_Click(object sender, EventArgs e)
{
var manager = Context.GetOwinContext().GetUserManager<ApplicationUserManager>();
manager.SetTwoFactorEnabled(User.Identity.GetUserId(), false);
Response.Redirect("/Account/Manage");
}
//EnableTwoFactorAuthentication
protected void TwoFactorEnable_Click(object sender, EventArgs e)
{
var manager = Context.GetOwinContext().GetUserManager<ApplicationUserManager>();
manager.SetTwoFactorEnabled(User.Identity.GetUserId(), true);
Response.Redirect("/Account/Manage");
}
}
}

View File

@@ -0,0 +1,51 @@
//------------------------------------------------------------------------------
// <auto-generated>
// Dieser Code wurde von einem Tool generiert.
//
// Änderungen an dieser Datei können fehlerhaftes Verhalten verursachen und gehen verloren, wenn
// der Code wird erneut generiert.
// </auto-generated>
//------------------------------------------------------------------------------
namespace WebFormApp.Account {
public partial class Manage {
/// <summary>
/// successMessage-Steuerelement
/// </summary>
/// <remarks>
/// Automatisch generiertes Feld.
/// Zum Ändern die Felddeklaration aus der Designerdatei in die CodeBehind-Datei verschieben.
/// </remarks>
protected global::System.Web.UI.WebControls.PlaceHolder successMessage;
/// <summary>
/// ChangePassword-Steuerelement
/// </summary>
/// <remarks>
/// Automatisch generiertes Feld.
/// Zum Ändern die Felddeklaration aus der Designerdatei in die CodeBehind-Datei verschieben.
/// </remarks>
protected global::System.Web.UI.WebControls.HyperLink ChangePassword;
/// <summary>
/// CreatePassword-Steuerelement
/// </summary>
/// <remarks>
/// Automatisch generiertes Feld.
/// Zum Ändern die Felddeklaration aus der Designerdatei in die CodeBehind-Datei verschieben.
/// </remarks>
protected global::System.Web.UI.WebControls.HyperLink CreatePassword;
/// <summary>
/// PhoneNumber-Steuerelement
/// </summary>
/// <remarks>
/// Automatisch generiertes Feld.
/// Zum Ändern die Felddeklaration aus der Designerdatei in die CodeBehind-Datei verschieben.
/// </remarks>
protected global::System.Web.UI.WebControls.Label PhoneNumber;
}
}

View File

@@ -0,0 +1,42 @@
<%@ Page Title="" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeBehind="ManageLogins.aspx.cs" Inherits="WebFormApp.Account.ManageLogins" %>
<%@ Register Src="~/Account/OpenAuthProviders.ascx" TagPrefix="uc" TagName="OpenAuthProviders" %>
<asp:Content ID="BodyContent" ContentPlaceHolderID="MainContent" runat="server">
<h2>Externe Anmeldungen verwalten.</h2>
<asp:PlaceHolder runat="server" ID="successMessage" Visible="false" ViewStateMode="Disabled">
<p class="text-success"><%: SuccessMessage %></p>
</asp:PlaceHolder>
<div>
<section id="externalLoginsForm">
<asp:ListView runat="server"
ItemType="Microsoft.AspNet.Identity.UserLoginInfo"
SelectMethod="GetLogins" DeleteMethod="RemoveLogin" DataKeyNames="LoginProvider,ProviderKey">
<LayoutTemplate>
<h4>Registrierte Anmeldungen</h4>
<table class="table">
<tbody>
<tr runat="server" id="itemPlaceholder"></tr>
</tbody>
</table>
</LayoutTemplate>
<ItemTemplate>
<tr>
<td><%#: Item.LoginProvider %></td>
<td>
<asp:Button runat="server" Text="Entfernen" CommandName="Delete" CausesValidation="false"
ToolTip='<%# "Dieses entfernen: " + Item.LoginProvider + " Anmeldung aus Ihrem Konto" %>'
Visible="<%# CanRemoveExternalLogins %>" CssClass="btn btn-default" />
</td>
</tr>
</ItemTemplate>
</asp:ListView>
</section>
</div>
<div>
<uc:OpenAuthProviders runat="server" ReturnUrl="~/Account/ManageLogins" />
</div>
</asp:Content>

View File

@@ -0,0 +1,62 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Microsoft.AspNet.Identity;
using Microsoft.AspNet.Identity.Owin;
namespace WebFormApp.Account
{
public partial class ManageLogins : System.Web.UI.Page
{
protected string SuccessMessage
{
get;
private set;
}
protected bool CanRemoveExternalLogins
{
get;
private set;
}
private bool HasPassword(ApplicationUserManager manager)
{
return manager.HasPassword(User.Identity.GetUserId());
}
protected void Page_Load(object sender, EventArgs e)
{
var manager = Context.GetOwinContext().GetUserManager<ApplicationUserManager>();
CanRemoveExternalLogins = manager.GetLogins(User.Identity.GetUserId()).Count() > 1;
SuccessMessage = String.Empty;
successMessage.Visible = !String.IsNullOrEmpty(SuccessMessage);
}
public IEnumerable<UserLoginInfo> GetLogins()
{
var manager = Context.GetOwinContext().GetUserManager<ApplicationUserManager>();
var accounts = manager.GetLogins(User.Identity.GetUserId());
CanRemoveExternalLogins = accounts.Count() > 1 || HasPassword(manager);
return accounts;
}
public void RemoveLogin(string loginProvider, string providerKey)
{
var manager = Context.GetOwinContext().GetUserManager<ApplicationUserManager>();
var signInManager = Context.GetOwinContext().Get<ApplicationSignInManager>();
var result = manager.RemoveLogin(User.Identity.GetUserId(), new UserLoginInfo(loginProvider, providerKey));
string msg = String.Empty;
if (result.Succeeded)
{
var user = manager.FindById(User.Identity.GetUserId());
signInManager.SignIn(user, isPersistent: false, rememberBrowser: false);
msg = "?m=RemoveLoginSuccess";
}
Response.Redirect("~/Account/ManageLogins" + msg);
}
}
}

View File

@@ -0,0 +1,24 @@
//------------------------------------------------------------------------------
// <auto-generated>
// Dieser Code wurde von einem Tool generiert.
//
// Änderungen an dieser Datei können fehlerhaftes Verhalten verursachen und gehen verloren, wenn
// der Code neu generiert wird.
// </auto-generated>
//------------------------------------------------------------------------------
namespace WebFormApp.Account {
public partial class ManageLogins {
/// <summary>
/// successMessage-Steuerelement
/// </summary>
/// <remarks>
/// Automatisch generiertes Feld.
/// Zum Ändern die Felddeklaration aus der Designerdatei in die CodeBehind-Datei verschieben.
/// </remarks>
protected global::System.Web.UI.WebControls.PlaceHolder successMessage;
}
}

View File

@@ -0,0 +1,93 @@
<%@ Page Title="Kennwort verwalten" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeBehind="ManagePassword.aspx.cs" Inherits="WebFormApp.Account.ManagePassword" %>
<asp:Content ID="BodyContent" ContentPlaceHolderID="MainContent" runat="server">
<h2><%: Title %>.</h2>
<div class="form-horizontal">
<section id="passwordForm">
<asp:PlaceHolder runat="server" ID="setPassword" Visible="false">
<p>
Sie besitzen kein lokales Kennwort für diese Website. Fügen Sie ein lokales
Kennwort hinzu, damit Sie sich ohne eine externe Anmeldung anmelden können.
</p>
<div class="form-horizontal">
<h4>Formular zum Festlegen des Kennworts</h4>
<asp:ValidationSummary runat="server" ShowModelStateErrors="true" CssClass="text-danger" />
<hr />
<div class="form-group">
<asp:Label runat="server" AssociatedControlID="password" CssClass="col-md-2 control-label">Kennwort</asp:Label>
<div class="col-md-10">
<asp:TextBox runat="server" ID="password" TextMode="Password" CssClass="form-control" />
<asp:RequiredFieldValidator runat="server" ControlToValidate="password"
CssClass="text-danger" ErrorMessage="Das Kennwortfeld ist erforderlich."
Display="Dynamic" ValidationGroup="SetPassword" />
<asp:ModelErrorMessage runat="server" ModelStateKey="NewPassword" AssociatedControlID="password"
CssClass="text-danger" SetFocusOnError="true" />
</div>
</div>
<div class="form-group">
<asp:Label runat="server" AssociatedControlID="confirmPassword" CssClass="col-md-2 control-label">Kennwort bestätigen</asp:Label>
<div class="col-md-10">
<asp:TextBox runat="server" ID="confirmPassword" TextMode="Password" CssClass="form-control" />
<asp:RequiredFieldValidator runat="server" ControlToValidate="confirmPassword"
CssClass="text-danger" Display="Dynamic" ErrorMessage="Das Feld zum Bestätigen des Kennworts ist erforderlich."
ValidationGroup="SetPassword" />
<asp:CompareValidator runat="server" ControlToCompare="Password" ControlToValidate="confirmPassword"
CssClass="text-danger" Display="Dynamic" ErrorMessage="Das Kennwort stimmt nicht mit dem Bestätigungskennwort überein."
ValidationGroup="SetPassword" />
</div>
</div>
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<asp:Button runat="server" Text="Kennwort festlegen" ValidationGroup="SetPassword" OnClick="SetPassword_Click" CssClass="btn btn-default" />
</div>
</div>
</div>
</asp:PlaceHolder>
<asp:PlaceHolder runat="server" ID="changePasswordHolder" Visible="false">
<div class="form-horizontal">
<h4>Formular zum Ändern des Kennworts</h4>
<hr />
<asp:ValidationSummary runat="server" ShowModelStateErrors="true" CssClass="text-danger" />
<div class="form-group">
<asp:Label runat="server" ID="CurrentPasswordLabel" AssociatedControlID="CurrentPassword" CssClass="col-md-2 control-label">Aktuelles Kennwort</asp:Label>
<div class="col-md-10">
<asp:TextBox runat="server" ID="CurrentPassword" TextMode="Password" CssClass="form-control" />
<asp:RequiredFieldValidator runat="server" ControlToValidate="CurrentPassword"
CssClass="text-danger" ErrorMessage="Das Feld für das aktuelle Kennwort ist erforderlich."
ValidationGroup="ChangePassword" />
</div>
</div>
<div class="form-group">
<asp:Label runat="server" ID="NewPasswordLabel" AssociatedControlID="NewPassword" CssClass="col-md-2 control-label">Neues Kennwort</asp:Label>
<div class="col-md-10">
<asp:TextBox runat="server" ID="NewPassword" TextMode="Password" CssClass="form-control" />
<asp:RequiredFieldValidator runat="server" ControlToValidate="NewPassword"
CssClass="text-danger" ErrorMessage="Das neue Kennwort ist erforderlich."
ValidationGroup="ChangePassword" />
</div>
</div>
<div class="form-group">
<asp:Label runat="server" ID="ConfirmNewPasswordLabel" AssociatedControlID="ConfirmNewPassword" CssClass="col-md-2 control-label">Neues Kennwort bestätigen</asp:Label>
<div class="col-md-10">
<asp:TextBox runat="server" ID="ConfirmNewPassword" TextMode="Password" CssClass="form-control" />
<asp:RequiredFieldValidator runat="server" ControlToValidate="ConfirmNewPassword"
CssClass="text-danger" Display="Dynamic" ErrorMessage="Das Bestätigen des neuen Kennworts ist erforderlich."
ValidationGroup="ChangePassword" />
<asp:CompareValidator runat="server" ControlToCompare="NewPassword" ControlToValidate="ConfirmNewPassword"
CssClass="text-danger" Display="Dynamic" ErrorMessage="Das neue Kennwort stimmt nicht mit dem Bestätigungskennwort überein."
ValidationGroup="ChangePassword" />
</div>
</div>
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<asp:Button runat="server" Text="Kennwort ändern" ValidationGroup="ChangePassword" OnClick="ChangePassword_Click" CssClass="btn btn-default" />
</div>
</div>
</div>
</asp:PlaceHolder>
</section>
</div>
</asp:Content>

View File

@@ -0,0 +1,98 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Microsoft.AspNet.Identity;
using Microsoft.AspNet.Identity.Owin;
namespace WebFormApp.Account
{
public partial class ManagePassword : System.Web.UI.Page
{
protected string SuccessMessage
{
get;
private set;
}
private bool HasPassword(ApplicationUserManager manager)
{
return manager.HasPassword(User.Identity.GetUserId());
}
protected void Page_Load(object sender, EventArgs e)
{
var manager = Context.GetOwinContext().GetUserManager<ApplicationUserManager>();
if (!IsPostBack)
{
// Zu rendernde Abschnitte ermitteln
if (HasPassword(manager))
{
changePasswordHolder.Visible = true;
}
else
{
setPassword.Visible = true;
changePasswordHolder.Visible = false;
}
// Erfolgsmeldung rendern
var message = Request.QueryString["m"];
if (message != null)
{
// Abfragezeichenfolge aus der Aktion entfernen
Form.Action = ResolveUrl("~/Account/Manage");
}
}
}
protected void ChangePassword_Click(object sender, EventArgs e)
{
if (IsValid)
{
var manager = Context.GetOwinContext().GetUserManager<ApplicationUserManager>();
var signInManager = Context.GetOwinContext().Get<ApplicationSignInManager>();
IdentityResult result = manager.ChangePassword(User.Identity.GetUserId(), CurrentPassword.Text, NewPassword.Text);
if (result.Succeeded)
{
var user = manager.FindById(User.Identity.GetUserId());
signInManager.SignIn( user, isPersistent: false, rememberBrowser: false);
Response.Redirect("~/Account/Manage?m=ChangePwdSuccess");
}
else
{
AddErrors(result);
}
}
}
protected void SetPassword_Click(object sender, EventArgs e)
{
if (IsValid)
{
// Lokale Anmeldeinformationen erstellen und das lokale Konto mit dem Benutzer verknüpfen
var manager = Context.GetOwinContext().GetUserManager<ApplicationUserManager>();
IdentityResult result = manager.AddPassword(User.Identity.GetUserId(), password.Text);
if (result.Succeeded)
{
Response.Redirect("~/Account/Manage?m=SetPwdSuccess");
}
else
{
AddErrors(result);
}
}
}
private void AddErrors(IdentityResult result)
{
foreach (var error in result.Errors)
{
ModelState.AddModelError("", error);
}
}
}
}

View File

@@ -0,0 +1,105 @@
//------------------------------------------------------------------------------
// <auto-generated>
// Dieser Code wurde von einem Tool generiert.
//
// Änderungen an dieser Datei können fehlerhaftes Verhalten verursachen und gehen verloren, wenn
// der Code neu generiert wird.
// </auto-generated>
//------------------------------------------------------------------------------
namespace WebFormApp.Account {
public partial class ManagePassword {
/// <summary>
/// setPassword-Steuerelement
/// </summary>
/// <remarks>
/// Automatisch generiertes Feld.
/// Zum Ändern die Felddeklaration aus der Designerdatei in die CodeBehind-Datei verschieben.
/// </remarks>
protected global::System.Web.UI.WebControls.PlaceHolder setPassword;
/// <summary>
/// password-Steuerelement
/// </summary>
/// <remarks>
/// Automatisch generiertes Feld.
/// Zum Ändern die Felddeklaration aus der Designerdatei in die CodeBehind-Datei verschieben.
/// </remarks>
protected global::System.Web.UI.WebControls.TextBox password;
/// <summary>
/// confirmPassword-Steuerelement
/// </summary>
/// <remarks>
/// Automatisch generiertes Feld.
/// Zum Ändern die Felddeklaration aus der Designerdatei in die CodeBehind-Datei verschieben.
/// </remarks>
protected global::System.Web.UI.WebControls.TextBox confirmPassword;
/// <summary>
/// changePasswordHolder-Steuerelement
/// </summary>
/// <remarks>
/// Automatisch generiertes Feld.
/// Zum Ändern die Felddeklaration aus der Designerdatei in die CodeBehind-Datei verschieben.
/// </remarks>
protected global::System.Web.UI.WebControls.PlaceHolder changePasswordHolder;
/// <summary>
/// CurrentPasswordLabel-Steuerelement
/// </summary>
/// <remarks>
/// Automatisch generiertes Feld.
/// Zum Ändern die Felddeklaration aus der Designerdatei in die CodeBehind-Datei verschieben.
/// </remarks>
protected global::System.Web.UI.WebControls.Label CurrentPasswordLabel;
/// <summary>
/// CurrentPassword-Steuerelement
/// </summary>
/// <remarks>
/// Automatisch generiertes Feld.
/// Zum Ändern die Felddeklaration aus der Designerdatei in die CodeBehind-Datei verschieben.
/// </remarks>
protected global::System.Web.UI.WebControls.TextBox CurrentPassword;
/// <summary>
/// NewPasswordLabel-Steuerelement
/// </summary>
/// <remarks>
/// Automatisch generiertes Feld.
/// Zum Ändern die Felddeklaration aus der Designerdatei in die CodeBehind-Datei verschieben.
/// </remarks>
protected global::System.Web.UI.WebControls.Label NewPasswordLabel;
/// <summary>
/// NewPassword-Steuerelement
/// </summary>
/// <remarks>
/// Automatisch generiertes Feld.
/// Zum Ändern die Felddeklaration aus der Designerdatei in die CodeBehind-Datei verschieben.
/// </remarks>
protected global::System.Web.UI.WebControls.TextBox NewPassword;
/// <summary>
/// ConfirmNewPasswordLabel-Steuerelement
/// </summary>
/// <remarks>
/// Automatisch generiertes Feld.
/// Zum Ändern die Felddeklaration aus der Designerdatei in die CodeBehind-Datei verschieben.
/// </remarks>
protected global::System.Web.UI.WebControls.Label ConfirmNewPasswordLabel;
/// <summary>
/// ConfirmNewPassword-Steuerelement
/// </summary>
/// <remarks>
/// Automatisch generiertes Feld.
/// Zum Ändern die Felddeklaration aus der Designerdatei in die CodeBehind-Datei verschieben.
/// </remarks>
protected global::System.Web.UI.WebControls.TextBox ConfirmNewPassword;
}
}

View File

@@ -0,0 +1,22 @@
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="OpenAuthProviders.ascx.cs" Inherits="WebFormApp.Account.OpenAuthProviders" %>
<div id="socialLoginList">
<h4>Einen anderen Dienst zum Anmelden verwenden.</h4>
<hr />
<asp:ListView runat="server" ID="providerDetails" ItemType="System.String"
SelectMethod="GetProviderNames" ViewStateMode="Disabled">
<ItemTemplate>
<p>
<button type="submit" class="btn btn-default" name="provider" value="<%#: Item %>"
title="Anmelden mithilfe Ihres <%#: Item %> Kontos.">
<%#: Item %>
</button>
</p>
</ItemTemplate>
<EmptyDataTemplate>
<div>
<p>Es sind keine externen Authentifizierungsdienste konfiguriert. In <a href="https://go.microsoft.com/fwlink/?LinkId=252803">diesem Artikel</a> finden Sie weitere Informationen zum Einrichten dieser ASP.NET-Anwendung für die Unterstützung der Anmeldung über externe Dienste.</p>
</div>
</EmptyDataTemplate>
</asp:ListView>
</div>

View File

@@ -0,0 +1,43 @@
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Web;
using Microsoft.AspNet.Identity;
using Microsoft.Owin.Security;
namespace WebFormApp.Account
{
public partial class OpenAuthProviders : System.Web.UI.UserControl
{
protected void Page_Load(object sender, EventArgs e)
{
if (IsPostBack)
{
var provider = Request.Form["provider"];
if (provider == null)
{
return;
}
// Umleitung an den externen Anmeldeanbieter anfordern
string redirectUrl = ResolveUrl(String.Format(CultureInfo.InvariantCulture, "~/Account/RegisterExternalLogin?{0}={1}&returnUrl={2}", IdentityHelper.ProviderNameKey, provider, ReturnUrl));
var properties = new AuthenticationProperties() { RedirectUri = redirectUrl };
// XSRF-Überprüfung beim Verknüpfen von Konten hinzufügen
if (Context.User.Identity.IsAuthenticated)
{
properties.Dictionary[IdentityHelper.XsrfKey] = Context.User.Identity.GetUserId();
}
Context.GetOwinContext().Authentication.Challenge(properties, provider);
Response.StatusCode = 401;
Response.End();
}
}
public string ReturnUrl { get; set; }
public IEnumerable<string> GetProviderNames()
{
return Context.GetOwinContext().Authentication.GetExternalAuthenticationTypes().Select(t => t.AuthenticationType);
}
}
}

View File

@@ -0,0 +1,24 @@
//------------------------------------------------------------------------------
// <auto-generated>
// Dieser Code wurde von einem Tool generiert.
//
// Änderungen an dieser Datei können fehlerhaftes Verhalten verursachen und gehen verloren, wenn
// der Code wird erneut generiert.
// </auto-generated>
//------------------------------------------------------------------------------
namespace WebFormApp.Account {
public partial class OpenAuthProviders {
/// <summary>
/// providerDetails-Steuerelement
/// </summary>
/// <remarks>
/// Automatisch generiertes Feld.
/// Zum Ändern die Felddeklaration aus der Designerdatei in die CodeBehind-Datei verschieben.
/// </remarks>
protected global::System.Web.UI.WebControls.ListView providerDetails;
}
}

View File

@@ -0,0 +1,45 @@
<%@ Page Title="Registrieren" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeBehind="Register.aspx.cs" Inherits="WebFormApp.Account.Register" %>
<asp:Content runat="server" ID="BodyContent" ContentPlaceHolderID="MainContent">
<h2><%: Title %>.</h2>
<p class="text-danger">
<asp:Literal runat="server" ID="ErrorMessage" />
</p>
<div class="form-horizontal">
<h4>Neues Konto erstellen</h4>
<hr />
<asp:ValidationSummary runat="server" CssClass="text-danger" />
<div class="form-group">
<asp:Label runat="server" AssociatedControlID="Email" CssClass="col-md-2 control-label">E-Mail</asp:Label>
<div class="col-md-10">
<asp:TextBox runat="server" ID="Email" CssClass="form-control" TextMode="Email" />
<asp:RequiredFieldValidator runat="server" ControlToValidate="Email"
CssClass="text-danger" ErrorMessage="Das E-Mail-Feld ist erforderlich." />
</div>
</div>
<div class="form-group">
<asp:Label runat="server" AssociatedControlID="Password" CssClass="col-md-2 control-label">Kennwort</asp:Label>
<div class="col-md-10">
<asp:TextBox runat="server" ID="Password" TextMode="Password" CssClass="form-control" />
<asp:RequiredFieldValidator runat="server" ControlToValidate="Password"
CssClass="text-danger" ErrorMessage="Das Kennwortfeld ist erforderlich." />
</div>
</div>
<div class="form-group">
<asp:Label runat="server" AssociatedControlID="ConfirmPassword" CssClass="col-md-2 control-label">Kennwort bestätigen</asp:Label>
<div class="col-md-10">
<asp:TextBox runat="server" ID="ConfirmPassword" TextMode="Password" CssClass="form-control" />
<asp:RequiredFieldValidator runat="server" ControlToValidate="ConfirmPassword"
CssClass="text-danger" Display="Dynamic" ErrorMessage="Das Feld zum Bestätigen des Kennworts ist erforderlich." />
<asp:CompareValidator runat="server" ControlToCompare="Password" ControlToValidate="ConfirmPassword"
CssClass="text-danger" Display="Dynamic" ErrorMessage="Das Kennwort stimmt nicht mit dem Bestätigungskennwort überein." />
</div>
</div>
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<asp:Button runat="server" OnClick="CreateUser_Click" Text="Registrieren" CssClass="btn btn-default" />
</div>
</div>
</div>
</asp:Content>

View File

@@ -0,0 +1,36 @@
using System;
using System.Linq;
using System.Web;
using System.Web.UI;
using Microsoft.AspNet.Identity;
using Microsoft.AspNet.Identity.Owin;
using Owin;
using WebFormApp.Models;
namespace WebFormApp.Account
{
public partial class Register : Page
{
protected void CreateUser_Click(object sender, EventArgs e)
{
var manager = Context.GetOwinContext().GetUserManager<ApplicationUserManager>();
var signInManager = Context.GetOwinContext().Get<ApplicationSignInManager>();
var user = new ApplicationUser() { UserName = Email.Text, Email = Email.Text };
IdentityResult result = manager.Create(user, Password.Text);
if (result.Succeeded)
{
// Weitere Informationen zum Aktivieren der Kontobestätigung und Kennwortzurücksetzung finden Sie unter https://go.microsoft.com/fwlink/?LinkID=320771
//string code = manager.GenerateEmailConfirmationToken(user.Id);
//string callbackUrl = IdentityHelper.GetUserConfirmationRedirectUrl(code, user.Id, Request);
//manager.SendEmail(user.Id, "Konto bestätigen", "Bitte bestätigen Sie Ihr Konto. Klicken Sie dazu <a href=\"" + callbackUrl + "\">hier</a>.");
signInManager.SignIn( user, isPersistent: false, rememberBrowser: false);
IdentityHelper.RedirectToReturnUrl(Request.QueryString["ReturnUrl"], Response);
}
else
{
ErrorMessage.Text = result.Errors.FirstOrDefault();
}
}
}
}

View File

@@ -0,0 +1,51 @@
//------------------------------------------------------------------------------
// <auto-generated>
// Dieser Code wurde von einem Tool generiert.
//
// Änderungen an dieser Datei können fehlerhaftes Verhalten verursachen und gehen verloren, wenn
// der Code wird erneut generiert.
// </auto-generated>
//------------------------------------------------------------------------------
namespace WebFormApp.Account {
public partial class Register {
/// <summary>
/// ErrorMessage-Steuerelement
/// </summary>
/// <remarks>
/// Automatisch generiertes Feld.
/// Zum Ändern die Felddeklaration aus der Designerdatei in die CodeBehind-Datei verschieben.
/// </remarks>
protected global::System.Web.UI.WebControls.Literal ErrorMessage;
/// <summary>
/// Email-Steuerelement
/// </summary>
/// <remarks>
/// Automatisch generiertes Feld.
/// Zum Ändern die Felddeklaration aus der Designerdatei in die CodeBehind-Datei verschieben.
/// </remarks>
protected global::System.Web.UI.WebControls.TextBox Email;
/// <summary>
/// Password-Steuerelement
/// </summary>
/// <remarks>
/// Automatisch generiertes Feld.
/// Zum Ändern die Felddeklaration aus der Designerdatei in die CodeBehind-Datei verschieben.
/// </remarks>
protected global::System.Web.UI.WebControls.TextBox Password;
/// <summary>
/// ConfirmPassword-Steuerelement
/// </summary>
/// <remarks>
/// Automatisch generiertes Feld.
/// Zum Ändern die Felddeklaration aus der Designerdatei in die CodeBehind-Datei verschieben.
/// </remarks>
protected global::System.Web.UI.WebControls.TextBox ConfirmPassword;
}
}

View File

@@ -0,0 +1,33 @@
<%@ Page Title="Externe Anmeldung registrieren" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeBehind="RegisterExternalLogin.aspx.cs" Inherits="WebFormApp.Account.RegisterExternalLogin" Async="true" %>
<asp:Content runat="server" ID="BodyContent" ContentPlaceHolderID="MainContent">
<h3>Mit Ihrem <%: ProviderName %>-Konto registrieren</h3>
<asp:PlaceHolder runat="server">
<div class="form-horizontal">
<h4>Zuordnungsformular</h4>
<hr />
<asp:ValidationSummary runat="server" ShowModelStateErrors="true" CssClass="text-danger" />
<p class="text-info">
Sie haben sich authentifiziert mit<strong><%: ProviderName %></strong>. Bitte geben Sie unten eine E-Mail-Adresse für die aktuelle Website ein,
und klicken Sie dann auf die Schaltfläche "Anmelden".
</p>
<div class="form-group">
<asp:Label runat="server" AssociatedControlID="email" CssClass="col-md-2 control-label">E-Mail</asp:Label>
<div class="col-md-10">
<asp:TextBox runat="server" ID="email" CssClass="form-control" TextMode="Email" />
<asp:RequiredFieldValidator runat="server" ControlToValidate="email"
Display="Dynamic" CssClass="text-danger" ErrorMessage="Die E-Mail-Adresse ist erforderlich." />
<asp:ModelErrorMessage runat="server" ModelStateKey="email" CssClass="text-error" />
</div>
</div>
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<asp:Button runat="server" Text="Anmelden" CssClass="btn btn-default" OnClick="LogIn_Click" />
</div>
</div>
</div>
</asp:PlaceHolder>
</asp:Content>

View File

@@ -0,0 +1,130 @@
using System;
using System.Web;
using Microsoft.AspNet.Identity;
using Microsoft.AspNet.Identity.Owin;
using Microsoft.Owin.Security;
using Owin;
using WebFormApp.Models;
namespace WebFormApp.Account
{
public partial class RegisterExternalLogin : System.Web.UI.Page
{
protected string ProviderName
{
get { return (string)ViewState["ProviderName"] ?? String.Empty; }
private set { ViewState["ProviderName"] = value; }
}
protected string ProviderAccountKey
{
get { return (string)ViewState["ProviderAccountKey"] ?? String.Empty; }
private set { ViewState["ProviderAccountKey"] = value; }
}
private void RedirectOnFail()
{
Response.Redirect((User.Identity.IsAuthenticated) ? "~/Account/Manage" : "~/Account/Login");
}
protected void Page_Load()
{
// Ergebnis von einem Authentifizierungsanbieter in der Anforderung verarbeiten
ProviderName = IdentityHelper.GetProviderNameFromRequest(Request);
if (String.IsNullOrEmpty(ProviderName))
{
RedirectOnFail();
return;
}
if (!IsPostBack)
{
var manager = Context.GetOwinContext().GetUserManager<ApplicationUserManager>();
var signInManager = Context.GetOwinContext().Get<ApplicationSignInManager>();
var loginInfo = Context.GetOwinContext().Authentication.GetExternalLoginInfo();
if (loginInfo == null)
{
RedirectOnFail();
return;
}
var user = manager.Find(loginInfo.Login);
if (user != null)
{
signInManager.SignIn(user, isPersistent: false, rememberBrowser: false);
IdentityHelper.RedirectToReturnUrl(Request.QueryString["ReturnUrl"], Response);
}
else if (User.Identity.IsAuthenticated)
{
// XSRF-Überprüfung beim Verknüpfen anwenden
var verifiedloginInfo = Context.GetOwinContext().Authentication.GetExternalLoginInfo(IdentityHelper.XsrfKey, User.Identity.GetUserId());
if (verifiedloginInfo == null)
{
RedirectOnFail();
return;
}
var result = manager.AddLogin(User.Identity.GetUserId(), verifiedloginInfo.Login);
if (result.Succeeded)
{
IdentityHelper.RedirectToReturnUrl(Request.QueryString["ReturnUrl"], Response);
}
else
{
AddErrors(result);
return;
}
}
else
{
email.Text = loginInfo.Email;
}
}
}
protected void LogIn_Click(object sender, EventArgs e)
{
CreateAndLoginUser();
}
private void CreateAndLoginUser()
{
if (!IsValid)
{
return;
}
var manager = Context.GetOwinContext().GetUserManager<ApplicationUserManager>();
var signInManager = Context.GetOwinContext().GetUserManager<ApplicationSignInManager>();
var user = new ApplicationUser() { UserName = email.Text, Email = email.Text };
IdentityResult result = manager.Create(user);
if (result.Succeeded)
{
var loginInfo = Context.GetOwinContext().Authentication.GetExternalLoginInfo();
if (loginInfo == null)
{
RedirectOnFail();
return;
}
result = manager.AddLogin(user.Id, loginInfo.Login);
if (result.Succeeded)
{
signInManager.SignIn(user, isPersistent: false, rememberBrowser: false);
// Weitere Informationen zum Aktivieren der Kontobestätigung und Kennwortzurücksetzung finden Sie unter https://go.microsoft.com/fwlink/?LinkID=320771
// var code = manager.GenerateEmailConfirmationToken(user.Id);
// Diesen Link per E-Mail senden: IdentityHelper.GetUserConfirmationRedirectUrl(code, user.Id)
IdentityHelper.RedirectToReturnUrl(Request.QueryString["ReturnUrl"], Response);
return;
}
}
AddErrors(result);
}
private void AddErrors(IdentityResult result)
{
foreach (var error in result.Errors)
{
ModelState.AddModelError("", error);
}
}
}
}

View File

@@ -0,0 +1,24 @@
//------------------------------------------------------------------------------
// <auto-generated>
// Dieser Code wurde von einem Tool generiert.
//
// Änderungen an dieser Datei können fehlerhaftes Verhalten verursachen und gehen verloren, wenn
// der Code wird erneut generiert.
// </auto-generated>
//------------------------------------------------------------------------------
namespace WebFormApp.Account {
public partial class RegisterExternalLogin {
/// <summary>
/// email-Steuerelement
/// </summary>
/// <remarks>
/// Automatisch generiertes Feld.
/// Zum Ändern die Felddeklaration aus der Designerdatei in die CodeBehind-Datei verschieben.
/// </remarks>
protected global::System.Web.UI.WebControls.TextBox email;
}
}

View File

@@ -0,0 +1,45 @@
<%@ Page Title="Kennwort zurücksetzen" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeBehind="ResetPassword.aspx.cs" Inherits="WebFormApp.Account.ResetPassword" Async="true" %>
<asp:Content runat="server" ID="BodyContent" ContentPlaceHolderID="MainContent">
<h2><%: Title %>.</h2>
<p class="text-danger">
<asp:Literal runat="server" ID="ErrorMessage" />
</p>
<div class="form-horizontal">
<h4>Neues Kennwort eingeben</h4>
<hr />
<asp:ValidationSummary runat="server" CssClass="text-danger" />
<div class="form-group">
<asp:Label runat="server" AssociatedControlID="Email" CssClass="col-md-2 control-label">E-Mail</asp:Label>
<div class="col-md-10">
<asp:TextBox runat="server" ID="Email" CssClass="form-control" TextMode="Email" />
<asp:RequiredFieldValidator runat="server" ControlToValidate="Email"
CssClass="text-danger" ErrorMessage="Das E-Mail-Feld ist erforderlich." />
</div>
</div>
<div class="form-group">
<asp:Label runat="server" AssociatedControlID="Password" CssClass="col-md-2 control-label">Kennwort</asp:Label>
<div class="col-md-10">
<asp:TextBox runat="server" ID="Password" TextMode="Password" CssClass="form-control" />
<asp:RequiredFieldValidator runat="server" ControlToValidate="Password"
CssClass="text-danger" ErrorMessage="Das Kennwortfeld ist erforderlich." />
</div>
</div>
<div class="form-group">
<asp:Label runat="server" AssociatedControlID="ConfirmPassword" CssClass="col-md-2 control-label">Kennwort bestätigen</asp:Label>
<div class="col-md-10">
<asp:TextBox runat="server" ID="ConfirmPassword" TextMode="Password" CssClass="form-control" />
<asp:RequiredFieldValidator runat="server" ControlToValidate="ConfirmPassword"
CssClass="text-danger" Display="Dynamic" ErrorMessage="Das Feld zum Bestätigen des Kennworts ist erforderlich." />
<asp:CompareValidator runat="server" ControlToCompare="Password" ControlToValidate="ConfirmPassword"
CssClass="text-danger" Display="Dynamic" ErrorMessage="Das Kennwort stimmt nicht mit dem Bestätigungskennwort überein." />
</div>
</div>
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<asp:Button runat="server" OnClick="Reset_Click" Text="Zurücksetzen" CssClass="btn btn-default" />
</div>
</div>
</div>
</asp:Content>

View File

@@ -0,0 +1,46 @@
using System;
using System.Linq;
using System.Web;
using System.Web.UI;
using Microsoft.AspNet.Identity;
using Microsoft.AspNet.Identity.Owin;
using Owin;
using WebFormApp.Models;
namespace WebFormApp.Account
{
public partial class ResetPassword : Page
{
protected string StatusMessage
{
get;
private set;
}
protected void Reset_Click(object sender, EventArgs e)
{
string code = IdentityHelper.GetCodeFromRequest(Request);
if (code != null)
{
var manager = Context.GetOwinContext().GetUserManager<ApplicationUserManager>();
var user = manager.FindByName(Email.Text);
if (user == null)
{
ErrorMessage.Text = "Es wurde kein Benutzer gefunden.";
return;
}
var result = manager.ResetPassword(user.Id, code, Password.Text);
if (result.Succeeded)
{
Response.Redirect("~/Account/ResetPasswordConfirmation");
return;
}
ErrorMessage.Text = result.Errors.FirstOrDefault();
return;
}
ErrorMessage.Text = "Fehler";
}
}
}

View File

@@ -0,0 +1,51 @@
//------------------------------------------------------------------------------
// <auto-generated>
// Dieser Code wurde von einem Tool generiert.
//
// Änderungen an dieser Datei können fehlerhaftes Verhalten verursachen und gehen verloren, wenn
// der Code neu generiert wird.
// </auto-generated>
//------------------------------------------------------------------------------
namespace WebFormApp.Account {
public partial class ResetPassword {
/// <summary>
/// ErrorMessage-Steuerelement
/// </summary>
/// <remarks>
/// Automatisch generiertes Feld.
/// Zum Ändern die Felddeklaration aus der Designerdatei in die CodeBehind-Datei verschieben.
/// </remarks>
protected global::System.Web.UI.WebControls.Literal ErrorMessage;
/// <summary>
/// Email-Steuerelement
/// </summary>
/// <remarks>
/// Automatisch generiertes Feld.
/// Zum Ändern die Felddeklaration aus der Designerdatei in die CodeBehind-Datei verschieben.
/// </remarks>
protected global::System.Web.UI.WebControls.TextBox Email;
/// <summary>
/// Password-Steuerelement
/// </summary>
/// <remarks>
/// Automatisch generiertes Feld.
/// Zum Ändern die Felddeklaration aus der Designerdatei in die CodeBehind-Datei verschieben.
/// </remarks>
protected global::System.Web.UI.WebControls.TextBox Password;
/// <summary>
/// ConfirmPassword-Steuerelement
/// </summary>
/// <remarks>
/// Automatisch generiertes Feld.
/// Zum Ändern die Felddeklaration aus der Designerdatei in die CodeBehind-Datei verschieben.
/// </remarks>
protected global::System.Web.UI.WebControls.TextBox ConfirmPassword;
}
}

View File

@@ -0,0 +1,8 @@
<%@ Page Title="Das Kennwort wurde geändert." Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeBehind="ResetPasswordConfirmation.aspx.cs" Inherits="WebFormApp.Account.ResetPasswordConfirmation" Async="true" %>
<asp:Content runat="server" ID="BodyContent" ContentPlaceHolderID="MainContent">
<h2><%: Title %>.</h2>
<div>
<p>Ihr Kennwort wurde geändert. Klicken Sie <asp:HyperLink ID="login" runat="server" NavigateUrl="~/Account/Login">hier</asp:HyperLink> um sich anzumelden. </p>
</div>
</asp:Content>

View File

@@ -0,0 +1,8 @@
using System.Web.UI;
namespace WebFormApp.Account
{
public partial class ResetPasswordConfirmation : Page
{
}
}

View File

@@ -0,0 +1,24 @@
//------------------------------------------------------------------------------
// <auto-generated>
// Dieser Code wurde von einem Tool generiert.
//
// Änderungen an dieser Datei können fehlerhaftes Verhalten verursachen und gehen verloren, wenn
// der Code neu generiert wird.
// </auto-generated>
//------------------------------------------------------------------------------
namespace WebFormApp.Account {
public partial class ResetPasswordConfirmation {
/// <summary>
/// login-Steuerelement
/// </summary>
/// <remarks>
/// Automatisch generiertes Feld.
/// Zum Ändern die Felddeklaration aus der Designerdatei in die CodeBehind-Datei verschieben.
/// </remarks>
protected global::System.Web.UI.WebControls.HyperLink login;
}
}

View File

@@ -0,0 +1,50 @@
<%@ Page Title="Zweistufige Authentifizierung" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeBehind="TwoFactorAuthenticationSignIn.aspx.cs" Inherits="WebFormApp.Account.TwoFactorAuthenticationSignIn" %>
<asp:Content ID="BodyContent" ContentPlaceHolderID="MainContent" runat="server">
<h2><%: Title %>.</h2>
<asp:PlaceHolder runat="server" ID="sendcode">
<section>
<h4>Überprüfungscode senden</h4>
<hr />
<div class="row">
<div class="col-md-12">
Anbieter für zweistufige Authentifizierung auswählen:
<asp:DropDownList runat="server" ID="Providers">
</asp:DropDownList>
<asp:Button Text="Absenden" ID="ProviderSubmit" OnClick="ProviderSubmit_Click" CssClass="btn btn-default" runat="server" />
</div>
</div>
</section>
</asp:PlaceHolder>
<asp:PlaceHolder runat="server" ID="verifycode" Visible="false">
<section>
<h4>Überprüfungscode eingeben</h4>
<hr />
<asp:HiddenField ID="SelectedProvider" runat="server" />
<asp:PlaceHolder runat="server" ID="ErrorMessage" Visible="false">
<p class="text-danger">
<asp:Literal runat="server" ID="FailureText" />
</p>
</asp:PlaceHolder>
<div class="form-group">
<asp:Label Text="Code:" runat="server" AssociatedControlID="Code" CssClass="col-md-2 control-label" />
<div class="col-md-10">
<asp:TextBox runat="server" ID="Code" CssClass="form-control" />
</div>
</div>
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<div class="checkbox">
<asp:Label Text="Browser merken" runat="server" />
<asp:CheckBox Text="" ID="RememberBrowser" runat="server" />
</div>
</div>
</div>
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<asp:Button Text="Absenden" ID="CodeSubmit" OnClick="CodeSubmit_Click" CssClass="btn btn-default" runat="server" />
</div>
</div>
</section>
</asp:PlaceHolder>
</asp:Content>

View File

@@ -0,0 +1,77 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Microsoft.AspNet.Identity;
using Microsoft.AspNet.Identity.Owin;
using WebFormApp.Models;
namespace WebFormApp.Account
{
public partial class TwoFactorAuthenticationSignIn : System.Web.UI.Page
{
private ApplicationSignInManager signinManager;
private ApplicationUserManager manager;
public TwoFactorAuthenticationSignIn()
{
manager = Context.GetOwinContext().GetUserManager<ApplicationUserManager>();
signinManager = Context.GetOwinContext().GetUserManager<ApplicationSignInManager>();
}
protected void Page_Load(object sender, EventArgs e)
{
var userId = signinManager.GetVerifiedUserId<ApplicationUser, string>();
if (userId == null)
{
Response.Redirect("/Account/Error", true);
}
var userFactors = manager.GetValidTwoFactorProviders(userId);
Providers.DataSource = userFactors.Select(x => x).ToList();
Providers.DataBind();
}
protected void CodeSubmit_Click(object sender, EventArgs e)
{
bool rememberMe = false;
bool.TryParse(Request.QueryString["RememberMe"], out rememberMe);
var result = signinManager.TwoFactorSignIn<ApplicationUser, string>(SelectedProvider.Value, Code.Text, isPersistent: rememberMe, rememberBrowser: RememberBrowser.Checked);
switch (result)
{
case SignInStatus.Success:
IdentityHelper.RedirectToReturnUrl(Request.QueryString["ReturnUrl"], Response);
break;
case SignInStatus.LockedOut:
Response.Redirect("/Account/Lockout");
break;
case SignInStatus.Failure:
default:
FailureText.Text = "Ungültiger Code.";
ErrorMessage.Visible = true;
break;
}
}
protected void ProviderSubmit_Click(object sender, EventArgs e)
{
if (!signinManager.SendTwoFactorCode(Providers.SelectedValue))
{
Response.Redirect("/Account/Error");
}
var user = manager.FindById(signinManager.GetVerifiedUserId<ApplicationUser, string>());
if (user != null)
{
var code = manager.GenerateTwoFactorToken(user.Id, Providers.SelectedValue);
}
SelectedProvider.Value = Providers.SelectedValue;
sendcode.Visible = false;
verifycode.Visible = true;
}
}
}

View File

@@ -0,0 +1,105 @@
//------------------------------------------------------------------------------
// <auto-generated>
// Dieser Code wurde von einem Tool generiert.
//
// Änderungen an dieser Datei können fehlerhaftes Verhalten verursachen und gehen verloren, wenn
// der Code neu generiert wird.
// </auto-generated>
//------------------------------------------------------------------------------
namespace WebFormApp.Account {
public partial class TwoFactorAuthenticationSignIn {
/// <summary>
/// sendcode-Steuerelement
/// </summary>
/// <remarks>
/// Automatisch generiertes Feld.
/// Zum Ändern die Felddeklaration aus der Designerdatei in die CodeBehind-Datei verschieben.
/// </remarks>
protected global::System.Web.UI.WebControls.PlaceHolder sendcode;
/// <summary>
/// Providers-Steuerelement
/// </summary>
/// <remarks>
/// Automatisch generiertes Feld.
/// Zum Ändern die Felddeklaration aus der Designerdatei in die CodeBehind-Datei verschieben.
/// </remarks>
protected global::System.Web.UI.WebControls.DropDownList Providers;
/// <summary>
/// ProviderSubmit-Steuerelement
/// </summary>
/// <remarks>
/// Automatisch generiertes Feld.
/// Zum Ändern die Felddeklaration aus der Designerdatei in die CodeBehind-Datei verschieben.
/// </remarks>
protected global::System.Web.UI.WebControls.Button ProviderSubmit;
/// <summary>
/// verifycode-Steuerelement
/// </summary>
/// <remarks>
/// Automatisch generiertes Feld.
/// Zum Ändern die Felddeklaration aus der Designerdatei in die CodeBehind-Datei verschieben.
/// </remarks>
protected global::System.Web.UI.WebControls.PlaceHolder verifycode;
/// <summary>
/// SelectedProvider-Steuerelement
/// </summary>
/// <remarks>
/// Automatisch generiertes Feld.
/// Zum Ändern die Felddeklaration aus der Designerdatei in die CodeBehind-Datei verschieben.
/// </remarks>
protected global::System.Web.UI.WebControls.HiddenField SelectedProvider;
/// <summary>
/// ErrorMessage-Steuerelement
/// </summary>
/// <remarks>
/// Automatisch generiertes Feld.
/// Zum Ändern die Felddeklaration aus der Designerdatei in die CodeBehind-Datei verschieben.
/// </remarks>
protected global::System.Web.UI.WebControls.PlaceHolder ErrorMessage;
/// <summary>
/// FailureText-Steuerelement
/// </summary>
/// <remarks>
/// Automatisch generiertes Feld.
/// Zum Ändern die Felddeklaration aus der Designerdatei in die CodeBehind-Datei verschieben.
/// </remarks>
protected global::System.Web.UI.WebControls.Literal FailureText;
/// <summary>
/// Codesteuerelement
/// </summary>
/// <remarks>
/// Automatisch generiertes Feld.
/// Zum Ändern die Felddeklaration aus der Designerdatei in die CodeBehind-Datei verschieben.
/// </remarks>
protected global::System.Web.UI.WebControls.TextBox Code;
/// <summary>
/// RememberBrowser-Steuerelement
/// </summary>
/// <remarks>
/// Automatisch generiertes Feld.
/// Zum Ändern die Felddeklaration aus der Designerdatei in die CodeBehind-Datei verschieben.
/// </remarks>
protected global::System.Web.UI.WebControls.CheckBox RememberBrowser;
/// <summary>
/// CodeSubmit-Steuerelement
/// </summary>
/// <remarks>
/// Automatisch generiertes Feld.
/// Zum Ändern die Felddeklaration aus der Designerdatei in die CodeBehind-Datei verschieben.
/// </remarks>
protected global::System.Web.UI.WebControls.Button CodeSubmit;
}
}

View File

@@ -0,0 +1,28 @@
<%@ Page Title="Telefonnummer überprüfen" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeBehind="VerifyPhoneNumber.aspx.cs" Inherits="WebFormApp.Account.VerifyPhoneNumber" %>
<asp:Content ID="BodyContent" ContentPlaceHolderID="MainContent" runat="server">
<h2><%: Title %>.</h2>
<p class="text-danger">
<asp:Literal runat="server" ID="ErrorMessage" />
</p>
<div class="form-horizontal">
<h4>Überprüfungscode eingeben</h4>
<hr />
<asp:HiddenField runat="server" ID="PhoneNumber" />
<asp:ValidationSummary runat="server" CssClass="text-danger" />
<div class="form-group">
<asp:Label runat="server" AssociatedControlID="Code" CssClass="col-md-2 control-label">Code</asp:Label>
<div class="col-md-10">
<asp:TextBox runat="server" ID="Code" CssClass="form-control" />
<asp:RequiredFieldValidator runat="server" ControlToValidate="Code"
CssClass="text-danger" ErrorMessage="Das Codefeld ist erforderlich." />
</div>
</div>
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<asp:Button runat="server" OnClick="Code_Click"
Text="Absenden" CssClass="btn btn-default" />
</div>
</div>
</div>
</asp:Content>

View File

@@ -0,0 +1,50 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Microsoft.AspNet.Identity;
using Microsoft.AspNet.Identity.Owin;
namespace WebFormApp.Account
{
public partial class VerifyPhoneNumber : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
var manager = Context.GetOwinContext().GetUserManager<ApplicationUserManager>();
var phonenumber = Request.QueryString["PhoneNumber"];
var code = manager.GenerateChangePhoneNumberToken(User.Identity.GetUserId(), phonenumber);
PhoneNumber.Value = phonenumber;
}
protected void Code_Click(object sender, EventArgs e)
{
if (!ModelState.IsValid)
{
ModelState.AddModelError("", "Ungültiger Code.");
return;
}
var manager = Context.GetOwinContext().GetUserManager<ApplicationUserManager>();
var signInManager = Context.GetOwinContext().Get<ApplicationSignInManager>();
var result = manager.ChangePhoneNumber(User.Identity.GetUserId(), PhoneNumber.Value, Code.Text);
if (result.Succeeded)
{
var user = manager.FindById(User.Identity.GetUserId());
if (user != null)
{
signInManager.SignIn(user, isPersistent: false, rememberBrowser: false);
Response.Redirect("/Account/Manage?m=AddPhoneNumberSuccess");
}
}
// Wurde dieser Punkt erreicht, ist ein Fehler aufgetreten. Formular erneut anzeigen.
ModelState.AddModelError("", "Fehler beim Überprüfen des Telefons.");
}
}
}

View File

@@ -0,0 +1,42 @@
//------------------------------------------------------------------------------
// <auto-generated>
// Dieser Code wurde von einem Tool generiert.
//
// Änderungen an dieser Datei können fehlerhaftes Verhalten verursachen und gehen verloren, wenn
// der Code neu generiert wird.
// </auto-generated>
//------------------------------------------------------------------------------
namespace WebFormApp.Account {
public partial class VerifyPhoneNumber {
/// <summary>
/// ErrorMessage-Steuerelement
/// </summary>
/// <remarks>
/// Automatisch generiertes Feld.
/// Zum Ändern die Felddeklaration aus der Designerdatei in die CodeBehind-Datei verschieben.
/// </remarks>
protected global::System.Web.UI.WebControls.Literal ErrorMessage;
/// <summary>
/// PhoneNumber-Steuerelement
/// </summary>
/// <remarks>
/// Automatisch generiertes Feld.
/// Zum Ändern die Felddeklaration aus der Designerdatei in die CodeBehind-Datei verschieben.
/// </remarks>
protected global::System.Web.UI.WebControls.HiddenField PhoneNumber;
/// <summary>
/// Codesteuerelement
/// </summary>
/// <remarks>
/// Automatisch generiertes Feld.
/// Zum Ändern die Felddeklaration aus der Designerdatei in die CodeBehind-Datei verschieben.
/// </remarks>
protected global::System.Web.UI.WebControls.TextBox Code;
}
}

View File

@@ -0,0 +1,12 @@
<?xml version="1.0"?>
<configuration>
<location path="Manage.aspx">
<system.web>
<authorization>
<deny users="?"/>
</authorization>
</system.web>
</location>
</configuration>