From d8041cbbae13e90711fb55998a3b52cc9ad5ceb9 Mon Sep 17 00:00:00 2001 From: Hao Kung Date: Mon, 24 Nov 2014 16:41:16 -0800 Subject: [PATCH] React to identity changes --- src/MusicStore.Spa/IdentityProviders.cs | 41 +++++++++++++++++++ src/MusicStore.Spa/Startup.cs | 6 ++- .../Controllers/AccountController.cs | 16 +++++++- .../Controllers/ManageController.cs | 16 ++++---- src/MusicStore/IdentityProviders.cs | 41 +++++++++++++++++++ src/MusicStore/Mocks/StartupSocialTesting.cs | 6 ++- src/MusicStore/Startup.cs | 6 ++- src/MusicStore/StartupNtlmAuthentication.cs | 8 +++- 8 files changed, 124 insertions(+), 16 deletions(-) create mode 100644 src/MusicStore.Spa/IdentityProviders.cs create mode 100644 src/MusicStore/IdentityProviders.cs diff --git a/src/MusicStore.Spa/IdentityProviders.cs b/src/MusicStore.Spa/IdentityProviders.cs new file mode 100644 index 0000000000..c1c48eac57 --- /dev/null +++ b/src/MusicStore.Spa/IdentityProviders.cs @@ -0,0 +1,41 @@ +using Microsoft.AspNet.Identity; +using MusicStore.Models; +using System.Threading.Tasks; +using System.Threading; + +namespace MusicStore +{ + public class EmailMessageProvider : IIdentityMessageProvider + { + public string Name + { + get + { + return "Email"; + } + } + + public Task SendAsync(IdentityMessage message, CancellationToken cancellationToken = default(CancellationToken)) + { + // Plug in your service + return Task.FromResult(0); + } + } + + public class SmsMessageProvider : IIdentityMessageProvider + { + public string Name + { + get + { + return "SMS"; + } + } + + public Task SendAsync(IdentityMessage message, CancellationToken cancellationToken = default(CancellationToken)) + { + // Plug in your service + return Task.FromResult(0); + } + } +} \ No newline at end of file diff --git a/src/MusicStore.Spa/Startup.cs b/src/MusicStore.Spa/Startup.cs index fc23be71e0..b7aec360b8 100644 --- a/src/MusicStore.Spa/Startup.cs +++ b/src/MusicStore.Spa/Startup.cs @@ -53,7 +53,11 @@ namespace MusicStore.Spa }); // Add Identity services to the services container - services.AddDefaultIdentity(Configuration); + services.AddIdentity(Configuration) + .AddEntityFrameworkStores() + .AddDefaultTokenProviders() + .AddMessageProvider() + .AddMessageProvider(); // Add application services to the service container //services.AddTransient(); diff --git a/src/MusicStore/Controllers/AccountController.cs b/src/MusicStore/Controllers/AccountController.cs index 2b55889e75..663577a61c 100644 --- a/src/MusicStore/Controllers/AccountController.cs +++ b/src/MusicStore/Controllers/AccountController.cs @@ -141,7 +141,13 @@ namespace MusicStore.Controllers // Send an email with this link string code = await UserManager.GenerateEmailConfirmationTokenAsync(user, cancellationToken: Context.RequestAborted); var callbackUrl = Url.Action("ConfirmEmail", "Account", new { userId = user.Id, code = code }, protocol: Context.Request.Scheme); - await UserManager.SendEmailAsync(user, "Confirm your account", "Please confirm your account by clicking here", cancellationToken: Context.RequestAborted); + var email = new IdentityMessage + { + Destination = model.Email, + Subject = "Confirm your account", + Body = "Please confirm your account by clicking this link: link" + }; + await UserManager.SendMessageAsync("Email", email, cancellationToken: Context.RequestAborted); #if !DEMO return RedirectToAction("Index", "Home"); #else @@ -204,7 +210,13 @@ namespace MusicStore.Controllers // Send an email with this link string code = await UserManager.GeneratePasswordResetTokenAsync(user, cancellationToken: Context.RequestAborted); var callbackUrl = Url.Action("ResetPassword", "Account", new { code = code }, protocol: Context.Request.Scheme); - await UserManager.SendEmailAsync(user, "Reset Password", "Please reset your password by clicking here", cancellationToken: Context.RequestAborted); + var email = new IdentityMessage + { + Destination = model.Email, + Subject = "Reset Password", + Body = "Please reset your password by clicking here: link" + }; + await UserManager.SendMessageAsync("Email", email, cancellationToken: Context.RequestAborted); #if !DEMO return RedirectToAction("ForgotPasswordConfirmation"); #else diff --git a/src/MusicStore/Controllers/ManageController.cs b/src/MusicStore/Controllers/ManageController.cs index 553663a017..c91fa92e19 100644 --- a/src/MusicStore/Controllers/ManageController.cs +++ b/src/MusicStore/Controllers/ManageController.cs @@ -87,18 +87,16 @@ namespace MusicStore.Controllers { return View(model); } + var user = await GetCurrentUserAsync(); // Generate the token and send it //https://github.com/aspnet/Identity/issues/217 - var code = await UserManager.GenerateChangePhoneNumberTokenAsync(await GetCurrentUserAsync(), model.Number); - if (UserManager.SmsService != null) + var code = await UserManager.GenerateChangePhoneNumberTokenAsync(user, model.Number); + var message = new IdentityMessage { - var message = new IdentityMessage - { - Destination = model.Number, - Body = "Your security code is: " + code - }; - await UserManager.SmsService.SendAsync(message, cancellationToken: Context.RequestAborted); - } + Destination = model.Number, + Body = "Your security code is: " + code + }; + await UserManager.SendMessageAsync("SMS", message, cancellationToken: Context.RequestAborted); return RedirectToAction("VerifyPhoneNumber", new { PhoneNumber = model.Number }); } diff --git a/src/MusicStore/IdentityProviders.cs b/src/MusicStore/IdentityProviders.cs new file mode 100644 index 0000000000..c1c48eac57 --- /dev/null +++ b/src/MusicStore/IdentityProviders.cs @@ -0,0 +1,41 @@ +using Microsoft.AspNet.Identity; +using MusicStore.Models; +using System.Threading.Tasks; +using System.Threading; + +namespace MusicStore +{ + public class EmailMessageProvider : IIdentityMessageProvider + { + public string Name + { + get + { + return "Email"; + } + } + + public Task SendAsync(IdentityMessage message, CancellationToken cancellationToken = default(CancellationToken)) + { + // Plug in your service + return Task.FromResult(0); + } + } + + public class SmsMessageProvider : IIdentityMessageProvider + { + public string Name + { + get + { + return "SMS"; + } + } + + public Task SendAsync(IdentityMessage message, CancellationToken cancellationToken = default(CancellationToken)) + { + // Plug in your service + return Task.FromResult(0); + } + } +} \ No newline at end of file diff --git a/src/MusicStore/Mocks/StartupSocialTesting.cs b/src/MusicStore/Mocks/StartupSocialTesting.cs index 07db11b13a..71fd128eb8 100644 --- a/src/MusicStore/Mocks/StartupSocialTesting.cs +++ b/src/MusicStore/Mocks/StartupSocialTesting.cs @@ -61,7 +61,11 @@ namespace MusicStore } // Add Identity services to the services container - services.AddDefaultIdentity(Configuration); + services.AddIdentity(Configuration) + .AddEntityFrameworkStores() + .AddDefaultTokenProviders() + .AddMessageProvider() + .AddMessageProvider(); services.ConfigureFacebookAuthentication(options => { diff --git a/src/MusicStore/Startup.cs b/src/MusicStore/Startup.cs index d4cefc9a67..c3d500f00a 100644 --- a/src/MusicStore/Startup.cs +++ b/src/MusicStore/Startup.cs @@ -43,7 +43,11 @@ namespace MusicStore } // Add Identity services to the services container - services.AddDefaultIdentity(Configuration); + services.AddIdentity(Configuration) + .AddEntityFrameworkStores() + .AddDefaultTokenProviders() + .AddMessageProvider() + .AddMessageProvider(); services.ConfigureFacebookAuthentication(options => { diff --git a/src/MusicStore/StartupNtlmAuthentication.cs b/src/MusicStore/StartupNtlmAuthentication.cs index e6d36a9209..6cb7266a3c 100644 --- a/src/MusicStore/StartupNtlmAuthentication.cs +++ b/src/MusicStore/StartupNtlmAuthentication.cs @@ -78,7 +78,11 @@ namespace MusicStore .AddDbContext(); // Add Identity services to the services container - services.AddDefaultIdentity(Configuration); + services.AddIdentity(Configuration) + .AddEntityFrameworkStores() + .AddDefaultTokenProviders() + .AddMessageProvider() + .AddMessageProvider(); // Add MVC services to the services container services.AddMvc(); @@ -118,4 +122,4 @@ namespace MusicStore SampleData.InitializeMusicStoreDatabaseAsync(app.ApplicationServices).Wait(); } } -} \ No newline at end of file +}