using System; using System.Collections.Generic; using System.Data.Entity; using System.Linq; using System.Security.Claims; using System.Threading.Tasks; using System.Web; using Microsoft.AspNet.Identity; using Microsoft.AspNet.Identity.EntityFramework; using Microsoft.AspNet.Identity.Owin; using Microsoft.Owin; using Microsoft.Owin.Security; using Chruch.Net.Models; using Church.Net.DAL.EF; using Church.Net.Entity; namespace Chruch.Net { public class EmailService : IIdentityMessageService { public Task SendAsync(IdentityMessage message) { // 將您的電子郵件服務外掛到這裡以傳送電子郵件。 return Task.FromResult(0); } } public class SmsService : IIdentityMessageService { public Task SendAsync(IdentityMessage message) { // 將您的 SMS 服務外掛到這裡以傳送簡訊。 return Task.FromResult(0); } } // 設定此應用程式中使用的應用程式使用者管理員。UserManager 在 ASP.NET Identity 中定義且由應用程式中使用。 public class ApplicationUserManager : UserManager { public ApplicationUserManager(IUserStore store) : base(store) { } public static ApplicationUserManager Create(IdentityFactoryOptions options, IOwinContext context) { var manager = new ApplicationUserManager(new UserStore(context.Get())); // 設定使用者名稱的驗證邏輯 manager.UserValidator = new UserValidator(manager) { AllowOnlyAlphanumericUserNames = false, RequireUniqueEmail = true }; // 設定密碼的驗證邏輯 manager.PasswordValidator = new PasswordValidator { RequiredLength = 6, RequireNonLetterOrDigit = true, RequireDigit = true, RequireLowercase = true, RequireUppercase = true, }; // 設定使用者鎖定詳細資料 manager.UserLockoutEnabledByDefault = true; manager.DefaultAccountLockoutTimeSpan = TimeSpan.FromMinutes(5); manager.MaxFailedAccessAttemptsBeforeLockout = 5; // 註冊雙因素驗證提供者。此應用程式使用手機和電子郵件接收驗證碼以驗證使用者 // 您可以撰寫專屬提供者,並將它外掛到這裡。 manager.RegisterTwoFactorProvider("電話代碼", new PhoneNumberTokenProvider { MessageFormat = "您的安全碼為 {0}" }); manager.RegisterTwoFactorProvider("電子郵件代碼", new EmailTokenProvider { Subject = "安全碼", BodyFormat = "您的安全碼為 {0}" }); manager.EmailService = new EmailService(); manager.SmsService = new SmsService(); var dataProtectionProvider = options.DataProtectionProvider; if (dataProtectionProvider != null) { manager.UserTokenProvider = new DataProtectorTokenProvider(dataProtectionProvider.Create("ASP.NET Identity")); } return manager; } } // 設定在此應用程式中使用的應用程式登入管理員。 public class ApplicationSignInManager : SignInManager { public ApplicationSignInManager(ApplicationUserManager userManager, IAuthenticationManager authenticationManager) : base(userManager, authenticationManager) { } public override Task CreateUserIdentityAsync(FamilyMember user) { return user.GenerateUserIdentityAsync((ApplicationUserManager)UserManager); } public static ApplicationSignInManager Create(IdentityFactoryOptions options, IOwinContext context) { return new ApplicationSignInManager(context.GetUserManager(), context.Authentication); } } }