protected override async Task <HttpResponseMessage> SendAsync ( HttpRequestMessage request, CancellationToken cancellationToken ) { if (request == null) { throw new ArgumentNullException(nameof(request)); } // If StateData such as username and JWT token is available in the session, use those values if (_httpContextAccessor.HttpContext.Session.GetStateData("StateData") != null) { token = _httpContextAccessor.HttpContext.Session.GetStateData("StateData")["_Token"]; if (token != null) { request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", token); } } else // If StateData such as username and JWT token is available in the cookie, use those values { if (_httpContextAccessor.HttpContext.Request.GetStateData("StateData") != null) { // Set StateData in session, cookie and TempData _stateHelper.SetState(_httpContextAccessor.HttpContext.Request.GetStateData("StateData")); request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", token); } } return(await base.SendAsync(request, cancellationToken).ConfigureAwait(false)); }
[ValidateAntiForgeryToken] // Prevents XSRF/CSRF attacks public async Task <IActionResult> Login(UserLoginVM userLoginVM) { if (userLoginVM == null) { throw new ArgumentNullException(nameof(userLoginVM)); } if (ModelState.IsValid) { using var client = _httpClientFactory.CreateClient("MMDB_API"); using var userContent = new StringContent(JsonSerializer.Serialize(userLoginVM), Encoding.UTF8, "application/json"); HttpResponseMessage httpResponseMessage = await client.PostAsync("users/login", userContent).ConfigureAwait(false); if (httpResponseMessage.IsSuccessStatusCode) { var responseStream = await httpResponseMessage.Content.ReadAsStreamAsync().ConfigureAwait(false); UserVM userVM = await JsonSerializer.DeserializeAsync <UserVM>(responseStream); try { _stateHelper.SetState(userVM, userLoginVM.RememberMe); } catch (Exception e) { _stateHelper.ClearState(); TempData["jwt"] = true; TempData["jwtMessage"] = e.Message; return(RedirectToAction("Index", "Home", new { area = "" })); } if (TempData.Keys.Contains("RedirectController")) { return(RedirectToAction(TempData["RedirectActionMethod"] as string, TempData["RedirectController"] as string, new { area = "" })); } return(RedirectToAction("Index", "Home", new { area = "" })); } } return(View(userLoginVM)); }
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline. public void Configure(IApplicationBuilder app, IWebHostEnvironment env, IStateHelper stateHelper) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } else { app.UseExceptionHandler("/Home/Error"); // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts. app.UseHsts(); } app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseSession(); // If state data is available in cookie, add it to the session // User checked the remember me checkbox // =========================================================== app.Use(async delegate(HttpContext context, Func <Task> next) { if (context.Request.GetStateData("StateData") != null) { stateHelper.SetState(context.Request.GetStateData("StateData")); } await next.Invoke().ConfigureAwait(false); }); // Start Localization // ================== // Get language preference from cookie and set in session app.Use(async delegate(HttpContext context, Func <Task> next) { if (context.Request.Cookies.ContainsKey("culture")) { string culture = context.Request.Cookies["culture"]; context.Session.SetString("culture", culture); } await next.Invoke().ConfigureAwait(false); }); // Configure Localization options var supportedCultures = new[] { new CultureInfo("en-US"), new CultureInfo("nl"), }; var localizationOptions = new RequestLocalizationOptions { DefaultRequestCulture = new RequestCulture("en-US"), SupportedCultures = supportedCultures, SupportedUICultures = supportedCultures }; localizationOptions.RequestCultureProviders.Clear(); localizationOptions.RequestCultureProviders.Add(new CultureProviderResolverService()); app.UseRequestLocalization(localizationOptions); // End Localization // ================ app.UseHttpsRedirection(); app.UseRouting(); app.UseAuthorization(); app.UseEndpoints(endpoints => { endpoints.MapControllerRoute( name: "MyArea", pattern: "{area:exists}/{controller=Home}/{action=Index}/{id?}"); endpoints.MapControllerRoute( name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"); }); }
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline. public void Configure(IApplicationBuilder app, IWebHostEnvironment env, IStateHelper stateHelper) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } else { app.UseExceptionHandler("/Home/Error"); app.UseHsts(); } app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseSession(); app.Use(async delegate(HttpContext context, Func <Task> next) { if (context.Request.GetStateData("StateData") != null) { stateHelper.SetState(context.Request.GetStateData("StateData")); } await next.Invoke().ConfigureAwait(false); }); // Start Localization // ================== // Get language preference from cookie and set in session app.Use(async delegate(HttpContext context, Func <Task> next) { if (context.Request.Cookies.ContainsKey("culture")) { string culture = context.Request.Cookies["culture"]; context.Session.SetString("culture", culture); } await next.Invoke().ConfigureAwait(false); }); // Configure Localization options var supportedCultures = new[] { new CultureInfo("en-US"), new CultureInfo("nl"), }; var localizationOptions = new RequestLocalizationOptions { DefaultRequestCulture = new RequestCulture("en-US"), SupportedCultures = supportedCultures, SupportedUICultures = supportedCultures }; localizationOptions.RequestCultureProviders.Clear(); localizationOptions.RequestCultureProviders.Add(new CultureProviderResolverService()); app.UseRequestLocalization(localizationOptions); // End Localization // ================ app.UseRouting(); app.UseAuthorization(); app.UseEndpoints(endpoints => { endpoints.MapControllerRoute( name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"); }); }