/// <summary> /// Configure /// </summary> /// <param name="builder">Authentication builder</param> public void Configure(AuthenticationBuilder builder, IConfiguration configuration) { builder.AddFacebook(FacebookDefaults.AuthenticationScheme, options => { var settings = new FacebookExternalAuthSettings(); try { var fbSettings = new MongoDBRepository <Setting>(DataSettingsHelper.ConnectionString()).Table.Where(x => x.Name.StartsWith("facebookexternalauthsettings")); settings.ClientKeyIdentifier = fbSettings.FirstOrDefault(x => x.Name == "facebookexternalauthsettings.clientkeyidentifier")?.Value; settings.ClientSecret = fbSettings.FirstOrDefault(x => x.Name == "facebookexternalauthsettings.clientsecret")?.Value; } catch { }; //no empty values allowed. otherwise, an exception could be thrown on application startup options.AppId = !string.IsNullOrWhiteSpace(settings.ClientKeyIdentifier) ? settings.ClientKeyIdentifier : "000"; options.AppSecret = !string.IsNullOrWhiteSpace(settings.ClientSecret) ? settings.ClientSecret : "000"; options.SaveTokens = true; //handles exception thrown by external auth provider options.Events = new OAuthEvents() { OnRemoteFailure = ctx => { ctx.HandleResponse(); var errorCode = ctx.Request.Query["error_code"].FirstOrDefault(); var errorMessage = ctx.Request.Query["error_message"].FirstOrDefault(); var state = ctx.Request.Query["state"].FirstOrDefault(); errorCode = WebUtility.UrlEncode(errorCode); errorMessage = WebUtility.UrlEncode(errorMessage); ctx.Response.Redirect($"/fb-signin-failed?error_code={errorCode}&error_message={errorMessage}"); return(Task.FromResult(0)); } }; }); }
/// <summary> /// Configure /// </summary> /// <param name="builder">Authentication builder</param> public void Configure(AuthenticationBuilder builder, IConfiguration configuration) { builder.AddGoogle(GoogleDefaults.AuthenticationScheme, options => { var settings = new GoogleExternalAuthSettings(); try { var goSettings = new MongoDBRepository <Setting>(DataSettingsHelper.ConnectionString()).Table.Where(x => x.Name.StartsWith("googleexternalauthsettings")); settings.ClientKeyIdentifier = goSettings.FirstOrDefault(x => x.Name == "googleexternalauthsettings.clientkeyidentifier")?.Value; settings.ClientSecret = goSettings.FirstOrDefault(x => x.Name == "googleexternalauthsettings.clientsecret")?.Value; } catch { }; options.ClientId = !string.IsNullOrWhiteSpace(settings.ClientKeyIdentifier) ? settings.ClientKeyIdentifier : "000"; options.ClientSecret = !string.IsNullOrWhiteSpace(settings.ClientSecret) ? settings.ClientSecret : "000"; options.SaveTokens = true; //handles exception thrown by external auth provider options.Events = new OAuthEvents() { OnRemoteFailure = ctx => { ctx.HandleResponse(); var errorMessage = ctx.Failure.Message; var state = ctx.Request.Query["state"].FirstOrDefault(); errorMessage = WebUtility.UrlEncode(errorMessage); ctx.Response.Redirect($"/google-signin-failed?error_message={errorMessage}"); return(Task.FromResult(0)); } }; }); }