RedPlus 개인 블로그

시삽: 레드플러스 님 
게시판 이동:
 제목 : Blazor + ASP.NET Core Identity => BuiltIn Accout Add 코드 조각
글번호: 330
작성자: Administrator ( 레드플러스 / redplus@live.com )
작성일: 2020/01/16 오전 11:00:55
조회수: 101

using System;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Components.Authorization;
using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Hosting;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using BlazorApp.Areas.Identity;
using BlazorApp.Data;
using Microsoft.AspNetCore.Identity.UI.Services;

namespace BlazorApp
{
    public class Startup
    {
        public Startup(IConfiguration configuration)
        {
            Configuration = configuration;
        }

        public IConfiguration Configuration { get; }

        public void ConfigureServices(IServiceCollection services)
        {
            services.AddDbContext<ApplicationDbContext>(options =>
                options.UseSqlServer(
                    Configuration.GetConnectionString("DefaultConnection")));

            //services.AddDefaultIdentity<IdentityUser>(options => options.SignIn.RequireConfirmedAccount = true)
            //    .AddEntityFrameworkStores<ApplicationDbContext>();
            services.AddIdentity<IdentityUser, IdentityRole>(options => options.SignIn.RequireConfirmedAccount = false)
                .AddEntityFrameworkStores<ApplicationDbContext>().AddDefaultTokenProviders();

            services.AddRazorPages();
            services.AddServerSideBlazor();
            services.AddScoped<AuthenticationStateProvider, RevalidatingIdentityAuthenticationStateProvider<IdentityUser>>();
            services.AddSingleton<WeatherForecastService>();

            services.AddSingleton<IEmailSender, EmailSender>();
        }

        public void Configure(IApplicationBuilder app, IWebHostEnvironment env, IServiceProvider serviceProvider)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
                app.UseDatabaseErrorPage();
            }
            else
            {
                app.UseExceptionHandler("/Error");
                app.UseHsts();
            }

            app.UseHttpsRedirection();
            app.UseStaticFiles();

            app.UseRouting();

            app.UseAuthentication();
            app.UseAuthorization();

            app.UseEndpoints(endpoints =>
            {
                endpoints.MapControllers();
                endpoints.MapRazorPages();
                endpoints.MapBlazorHub();
                endpoints.MapFallbackToPage("/_Host");
            });

            // PM> Update-Database required
            CreateBuiltInUsersAndRoles(serviceProvider).Wait();
        }

        private async Task CreateBuiltInUsersAndRoles(IServiceProvider serviceProvider)
        {
            //[0] DbContext 개체 생성
            var dbContext = serviceProvider.GetRequiredService<ApplicationDbContext>();
            dbContext.Database.EnsureCreated(); // 데이터베이스가 생성되어 있는지 확인 

            // 기본 내장 사용자 및 역할이 하나도 없으면(즉, 처음 데이터베이스 생성이라면)
            if (!dbContext.Users.Any() && !dbContext.Roles.Any())
            {
                string domainName = "a.com";

                //[1] Groups(Roles)
                var roleManager = serviceProvider.GetRequiredService<RoleManager<IdentityRole>>();
                //[1][1] ('Administrators', '관리자 그룹', 'Group', '응용 프로그램을 총 관리하는 관리 그룹 계정')
                //[1][2] ('Everyone', '전체 사용자 그룹', 'Group', '응용 프로그램을 사용하는 모든 사용자 그룹 계정')
                //[1][3] ('Users', '일반 사용자 그룹', 'Group', '일반 사용자 그룹 계정')
                //[1][4] ('Guests', '관리자 그룹', 'Group', '게스트 사용자 그룹 계정')
                string[] roleNames = { "Administrators", "Everyone", "Users", "Guests" };
                foreach (var roleName in roleNames)
                {
                    var roleExist = await roleManager.RoleExistsAsync(roleName);
                    if (!roleExist)
                    {
                        await roleManager.CreateAsync(new IdentityRole(roleName)); // 빌트인 그룹 생성
                    }
                }

                //[2] Users
                var userManager = serviceProvider.GetRequiredService<UserManager<IdentityUser>>();
                //[2][1] Administrator
                // ('Administrator', '관리자', 'User', '응용 프로그램을 총 관리하는 사용자 계정')
                IdentityUser administrator = await userManager.FindByEmailAsync($"administrator@{domainName}");
                if (administrator == null)
                {
                    administrator = new IdentityUser()
                    {
                        UserName = "Administrator",
                        Email = $"administrator@{domainName}",
                    };
                    await userManager.CreateAsync(administrator, "Pa$$w0rd");
                }

                //[2][2] Guest
                // ('Guest', '게스트 사용자', 'User', '게스트 사용자 계정')
                IdentityUser guest = await userManager.FindByEmailAsync($"guest@{domainName}");
                if (guest == null)
                {
                    guest = new IdentityUser()
                    {
                        UserName = "Guest",
                        Email = $"guest@{domainName}",
                    };
                    await userManager.CreateAsync(guest, "Pa$$w0rd");
                }


                //[2][3] Anonymous
                // ('Anonymous', '익명 사용자', 'User', '익명 사용자 계정')
                IdentityUser anonymous = await userManager.FindByEmailAsync($"anonymous@{domainName}");
                if (anonymous == null)
                {
                    anonymous = new IdentityUser()
                    {
                        UserName = "Anonymous",
                        Email = $"anonymous@{domainName}",
                    };
                    await userManager.CreateAsync(anonymous, "Pa$$w0rd");
                }

                //[3] UsersInRoles: AspNetUserRoles Table
                await userManager.AddToRoleAsync(administrator, "Administrators");
                await userManager.AddToRoleAsync(administrator, "Users");
                await userManager.AddToRoleAsync(guest, "Guests");
                await userManager.AddToRoleAsync(anonymous, "Guests");
            }
        }
    }
}
 

 
이전 글   다음 글 삭제 수정 답변 글쓰기 리스트


관련 아티클 리스트
  제       목 파일 작성자 작성일 조회
이전글 components-reconnect-modal_ID를 사용하여 서버 연결 창 모양 ... - Administrator 2020-02-09 28
현재글 Blazor + ASP.NET Core Identity => BuiltIn Accou... - Administrator 2020-01-16 101
다음글 HTTP Error 500.30 - ANCM In-Process Start Failu... HTTPError500_30.png(35 KB) Administrator 2020-01-03 134
관련 페이지 리스트
numtitlenamedateview
331 components-reconnect-modal_ID를 사용하여 서버 연결 창 모양 ... Administrator 2020-02-09 28
330 Blazor + ASP.NET Core Identity => BuiltIn Accou... Administrator 2020-01-16 101
329 HTTP Error 500.30 - ANCM In-Process Start Failu... Administrator 2020-01-03 134
328 Blazor Dynamic 텍스트박스 데모 Administrator 2019-12-29 75
327 InvalidOperationException: A second operation s... Administrator 2019-12-22 118
326 Blazor: 단일 파일 업로드 코드 조각 Administrator 2019-12-08 176
325 [서평][도서] 홀로 성장하는 시대는 끝났다 Administrator 2019-10-27 196
324 CS0012: The type 'Object' is defined in an asse... Administrator 2019-10-26 186
322 "Unable to connect to the Web server 'IIS Expre... Administrator 2019-10-21 161
321 .NET Core 3.0 SDK 설치 Administrator 2019-09-23 185
320 자바(Java) 학습 개발 환경 구축 및 Git과 GitHub에 Java 리포지토리 ... Administrator 2019-08-09 200
319 알고리즘 기초 강의(part 2 of 12) - 개수 알고리즘(Count Algori... Administrator 2019-07-28 174
318 Windows.old 삭제 Administrator 2019-07-27 180
317 알고리즘 기초 강의 01 - 합계 알고리즘(Sum Algorithm) Administrator 2019-07-25 185
316 .NET Core 3.0 Preview7 설치 화면 캡처 Administrator 2019-07-23 201
315 Azure Data Studio 설치 관련 이미지 모음 Administrator 2019-07-19 177
314 PostgreSQL 설치 관련 이미지 모음 Administrator 2019-07-19 129
313 Visual Studio 2019 편집기 및 솔루션 탐색기 열기 등 관련 이미지 Administrator 2019-07-19 133
312 Visual Studio 2019 글꼴 변경 방법 이미지들 Administrator 2019-07-19 136
311 C# HelloWorld 이미지 모음 Administrator 2019-07-19 135
 
 
 
손님 사용자 Anonymous (손님)
로그인 Home