Update 07082021
This commit is contained in:
28
WebFormApp/Account/AddPhoneNumber.aspx
Normal file
28
WebFormApp/Account/AddPhoneNumber.aspx
Normal 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" 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>
|
||||
34
WebFormApp/Account/AddPhoneNumber.aspx.cs
Normal file
34
WebFormApp/Account/AddPhoneNumber.aspx.cs
Normal 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));
|
||||
}
|
||||
}
|
||||
}
|
||||
33
WebFormApp/Account/AddPhoneNumber.aspx.designer.cs
generated
Normal file
33
WebFormApp/Account/AddPhoneNumber.aspx.designer.cs
generated
Normal 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;
|
||||
}
|
||||
}
|
||||
18
WebFormApp/Account/Confirm.aspx
Normal file
18
WebFormApp/Account/Confirm.aspx
Normal 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>
|
||||
37
WebFormApp/Account/Confirm.aspx.cs
Normal file
37
WebFormApp/Account/Confirm.aspx.cs
Normal 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;
|
||||
}
|
||||
}
|
||||
}
|
||||
43
WebFormApp/Account/Confirm.aspx.designer.cs
generated
Normal file
43
WebFormApp/Account/Confirm.aspx.designer.cs
generated
Normal 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;
|
||||
|
||||
}
|
||||
}
|
||||
39
WebFormApp/Account/Forgot.aspx
Normal file
39
WebFormApp/Account/Forgot.aspx
Normal 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>
|
||||
40
WebFormApp/Account/Forgot.aspx.cs
Normal file
40
WebFormApp/Account/Forgot.aspx.cs
Normal 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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
60
WebFormApp/Account/Forgot.aspx.designer.cs
generated
Normal file
60
WebFormApp/Account/Forgot.aspx.designer.cs
generated
Normal 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;
|
||||
}
|
||||
}
|
||||
8
WebFormApp/Account/Lockout.aspx
Normal file
8
WebFormApp/Account/Lockout.aspx
Normal 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>
|
||||
17
WebFormApp/Account/Lockout.aspx.cs
Normal file
17
WebFormApp/Account/Lockout.aspx.cs
Normal 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)
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
17
WebFormApp/Account/Lockout.aspx.designer.cs
generated
Normal file
17
WebFormApp/Account/Lockout.aspx.designer.cs
generated
Normal 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
|
||||
{
|
||||
}
|
||||
}
|
||||
65
WebFormApp/Account/Login.aspx
Normal file
65
WebFormApp/Account/Login.aspx
Normal 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>
|
||||
61
WebFormApp/Account/Login.aspx.cs
Normal file
61
WebFormApp/Account/Login.aspx.cs
Normal 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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
78
WebFormApp/Account/Login.aspx.designer.cs
generated
Normal file
78
WebFormApp/Account/Login.aspx.designer.cs
generated
Normal 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;
|
||||
}
|
||||
}
|
||||
80
WebFormApp/Account/Manage.aspx
Normal file
80
WebFormApp/Account/Manage.aspx
Normal 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]" /> |
|
||||
<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>
|
||||
128
WebFormApp/Account/Manage.aspx.cs
Normal file
128
WebFormApp/Account/Manage.aspx.cs
Normal 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");
|
||||
}
|
||||
}
|
||||
}
|
||||
51
WebFormApp/Account/Manage.aspx.designer.cs
generated
Normal file
51
WebFormApp/Account/Manage.aspx.designer.cs
generated
Normal 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;
|
||||
}
|
||||
}
|
||||
42
WebFormApp/Account/ManageLogins.aspx
Normal file
42
WebFormApp/Account/ManageLogins.aspx
Normal 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>
|
||||
62
WebFormApp/Account/ManageLogins.aspx.cs
Normal file
62
WebFormApp/Account/ManageLogins.aspx.cs
Normal 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);
|
||||
}
|
||||
}
|
||||
}
|
||||
24
WebFormApp/Account/ManageLogins.aspx.designer.cs
generated
Normal file
24
WebFormApp/Account/ManageLogins.aspx.designer.cs
generated
Normal 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;
|
||||
}
|
||||
}
|
||||
93
WebFormApp/Account/ManagePassword.aspx
Normal file
93
WebFormApp/Account/ManagePassword.aspx
Normal 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>
|
||||
98
WebFormApp/Account/ManagePassword.aspx.cs
Normal file
98
WebFormApp/Account/ManagePassword.aspx.cs
Normal 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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
105
WebFormApp/Account/ManagePassword.aspx.designer.cs
generated
Normal file
105
WebFormApp/Account/ManagePassword.aspx.designer.cs
generated
Normal 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;
|
||||
}
|
||||
}
|
||||
22
WebFormApp/Account/OpenAuthProviders.ascx
Normal file
22
WebFormApp/Account/OpenAuthProviders.ascx
Normal 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>
|
||||
43
WebFormApp/Account/OpenAuthProviders.ascx.cs
Normal file
43
WebFormApp/Account/OpenAuthProviders.ascx.cs
Normal 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);
|
||||
}
|
||||
}
|
||||
}
|
||||
24
WebFormApp/Account/OpenAuthProviders.ascx.designer.cs
generated
Normal file
24
WebFormApp/Account/OpenAuthProviders.ascx.designer.cs
generated
Normal 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;
|
||||
}
|
||||
}
|
||||
45
WebFormApp/Account/Register.aspx
Normal file
45
WebFormApp/Account/Register.aspx
Normal 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>
|
||||
36
WebFormApp/Account/Register.aspx.cs
Normal file
36
WebFormApp/Account/Register.aspx.cs
Normal 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();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
51
WebFormApp/Account/Register.aspx.designer.cs
generated
Normal file
51
WebFormApp/Account/Register.aspx.designer.cs
generated
Normal 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;
|
||||
}
|
||||
}
|
||||
33
WebFormApp/Account/RegisterExternalLogin.aspx
Normal file
33
WebFormApp/Account/RegisterExternalLogin.aspx
Normal 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>
|
||||
130
WebFormApp/Account/RegisterExternalLogin.aspx.cs
Normal file
130
WebFormApp/Account/RegisterExternalLogin.aspx.cs
Normal 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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
24
WebFormApp/Account/RegisterExternalLogin.aspx.designer.cs
generated
Normal file
24
WebFormApp/Account/RegisterExternalLogin.aspx.designer.cs
generated
Normal 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;
|
||||
}
|
||||
}
|
||||
45
WebFormApp/Account/ResetPassword.aspx
Normal file
45
WebFormApp/Account/ResetPassword.aspx
Normal 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>
|
||||
46
WebFormApp/Account/ResetPassword.aspx.cs
Normal file
46
WebFormApp/Account/ResetPassword.aspx.cs
Normal 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";
|
||||
}
|
||||
}
|
||||
}
|
||||
51
WebFormApp/Account/ResetPassword.aspx.designer.cs
generated
Normal file
51
WebFormApp/Account/ResetPassword.aspx.designer.cs
generated
Normal 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;
|
||||
}
|
||||
}
|
||||
8
WebFormApp/Account/ResetPasswordConfirmation.aspx
Normal file
8
WebFormApp/Account/ResetPasswordConfirmation.aspx
Normal 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>
|
||||
8
WebFormApp/Account/ResetPasswordConfirmation.aspx.cs
Normal file
8
WebFormApp/Account/ResetPasswordConfirmation.aspx.cs
Normal file
@@ -0,0 +1,8 @@
|
||||
using System.Web.UI;
|
||||
|
||||
namespace WebFormApp.Account
|
||||
{
|
||||
public partial class ResetPasswordConfirmation : Page
|
||||
{
|
||||
}
|
||||
}
|
||||
24
WebFormApp/Account/ResetPasswordConfirmation.aspx.designer.cs
generated
Normal file
24
WebFormApp/Account/ResetPasswordConfirmation.aspx.designer.cs
generated
Normal 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;
|
||||
}
|
||||
}
|
||||
50
WebFormApp/Account/TwoFactorAuthenticationSignIn.aspx
Normal file
50
WebFormApp/Account/TwoFactorAuthenticationSignIn.aspx
Normal 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>
|
||||
77
WebFormApp/Account/TwoFactorAuthenticationSignIn.aspx.cs
Normal file
77
WebFormApp/Account/TwoFactorAuthenticationSignIn.aspx.cs
Normal 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;
|
||||
}
|
||||
}
|
||||
}
|
||||
105
WebFormApp/Account/TwoFactorAuthenticationSignIn.aspx.designer.cs
generated
Normal file
105
WebFormApp/Account/TwoFactorAuthenticationSignIn.aspx.designer.cs
generated
Normal 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;
|
||||
}
|
||||
}
|
||||
28
WebFormApp/Account/VerifyPhoneNumber.aspx
Normal file
28
WebFormApp/Account/VerifyPhoneNumber.aspx
Normal 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>
|
||||
50
WebFormApp/Account/VerifyPhoneNumber.aspx.cs
Normal file
50
WebFormApp/Account/VerifyPhoneNumber.aspx.cs
Normal 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.");
|
||||
}
|
||||
}
|
||||
}
|
||||
42
WebFormApp/Account/VerifyPhoneNumber.aspx.designer.cs
generated
Normal file
42
WebFormApp/Account/VerifyPhoneNumber.aspx.designer.cs
generated
Normal 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;
|
||||
}
|
||||
}
|
||||
12
WebFormApp/Account/Web.config
Normal file
12
WebFormApp/Account/Web.config
Normal file
@@ -0,0 +1,12 @@
|
||||
<?xml version="1.0"?>
|
||||
<configuration>
|
||||
|
||||
<location path="Manage.aspx">
|
||||
<system.web>
|
||||
<authorization>
|
||||
<deny users="?"/>
|
||||
</authorization>
|
||||
</system.web>
|
||||
</location>
|
||||
|
||||
</configuration>
|
||||
Reference in New Issue
Block a user