コード例 #1
0
        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddDbContext <TNDbContext>(options => options.UseSqlServer(Configuration.GetConnectionString("TNDatabase")));
            services
            .AddIdentity <AppUser, AppRole>()
            .AddEntityFrameworkStores <TNDbContext>()
            .AddDefaultTokenProviders();
            //Declare DI
            services.AddTransient <UserManager <AppUser>, UserManager <AppUser> >();
            services.AddTransient <SignInManager <AppUser>, SignInManager <AppUser> >();
            services.AddTransient <RoleManager <AppRole>, RoleManager <AppRole> >();
            services.AddTransient <ICategoryService, CategoryService>();
            services.AddTransient <IExamAdminService, ExamAdminService>();
            services.AddTransient <IExamUserService, ExamUserService>();
            services.AddTransient <IFavoriteExamService, FavoriteExamService>();
            services.AddTransient <IQuestionService, QuestionService>();
            services.AddTransient <IUserService, UserService>();
            services.AddTransient <IFacebookAuth, FacebookAuthService>();
            services.AddTransient <IEmailSender, EmailSender>(i =>
                                                              new EmailSender(
                                                                  Configuration["EmailSender:Host"],
                                                                  Configuration.GetValue <int>("EmailSender:Port"),
                                                                  Configuration.GetValue <bool>("EmailSender:EnableSSL"),
                                                                  Configuration["EmailSender:UserName"],
                                                                  Configuration["EmailSender:Password"]

                                                                  ));
            services.Configure <IdentityOptions>(options =>
            {
                options.Password.RequireDigit           = true;
                options.Password.RequireLowercase       = false;
                options.Password.RequireNonAlphanumeric = false;
                options.Password.RequireUppercase       = false;
                options.Password.RequiredLength         = 8;
                options.Password.RequiredUniqueChars    = 0;
            });
            services.AddAuthentication(opt =>
            {
                opt.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
                opt.DefaultChallengeScheme    = JwtBearerDefaults.AuthenticationScheme;
                opt.DefaultScheme             = JwtBearerDefaults.AuthenticationScheme;
            }).AddJwtBearer(options =>
            {
                options.RequireHttpsMetadata      = false;
                options.SaveToken                 = true;
                options.TokenValidationParameters = new TokenValidationParameters
                {
                    ClockSkew                = TimeSpan.FromSeconds(5),
                    ValidateIssuer           = true,
                    ValidateAudience         = true,
                    ValidateLifetime         = true,
                    ValidateIssuerSigningKey = true,
                    ValidIssuer              = Configuration["Tokens:Issuer"],
                    ValidAudience            = Configuration["Tokens:Issuer"],
                    IssuerSigningKey         = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(Configuration["Tokens:SecretKey"]))
                };
            });

            //add login with fb
            var fbAuthSettings = new FBAuthSettings();

            Configuration.Bind(nameof(FBAuthSettings), fbAuthSettings);
            services.AddSingleton(fbAuthSettings);
            services.AddHttpClient();
            services.AddAuthorization(options =>
            {
                options.AddPolicy("admin",
                                  authBuilder =>
                {
                    authBuilder.RequireRole("admin");
                });
                options.AddPolicy("user",
                                  authBuilder =>
                {
                    authBuilder.RequireRole("user");
                });
            });
            services.AddControllersWithViews().AddNewtonsoftJson(
                options =>
            {
                options.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
                options.SerializerSettings.NullValueHandling     = NullValueHandling.Ignore;
            }
                );
            services.AddCors(options =>
            {
                options.AddDefaultPolicy(builder => builder.AllowAnyOrigin().AllowAnyHeader().AllowAnyMethod());
            });
            services.AddSwaggerGen(c =>
            {
                c.SwaggerDoc("v1", new OpenApiInfo {
                    Title = "Swagger", Version = "v1"
                });
            });
        }
コード例 #2
0
 public FacebookAuthService(IHttpClientFactory httpClientFactory, FBAuthSettings facebookAuthSettings)
 {
     _httpClientFactory = httpClientFactory;
     _fbAuthSettings    = facebookAuthSettings;
 }