public static IServiceCollection AddFacebookLogin(this IServiceCollection services, Action <FacebookLoginOptions> optionsAction = null) { var fbOptions = new FacebookLoginOptions(); optionsAction?.Invoke(fbOptions); return(services .AddSingleton(fbOptions) .AddScoped <FacebookLoginService>()); }
public AccountService( IOptions <JwtOptions> jwtOptions, IOptions <FacebookLoginOptions> fbLoginOptions, IOptions <EmailOptions> emailOptions, SignInManager <ApplicationUser> signInManager, UserManager <ApplicationUser> userManager, IUserRepository userRepository, IHttpClientFactory clientFactory, IMapper mapper, IEmailService emailService, INotificationRepository notificationRepository ) { _jwtOptions = jwtOptions.Value; _fbLoginOptions = fbLoginOptions.Value; _emailOptions = emailOptions.Value; _signInManager = signInManager; _userManager = userManager; _userRepository = userRepository; _clientFactory = clientFactory; _mapper = mapper; _emailService = emailService; _notificationRepository = notificationRepository; }
public async Task InvokeAsync(HttpContext context, FacebookLoginService fbService, FacebookLoginOptions fbOptions) { try { var code = context.Request.Query["code"].ToString(); if (string.IsNullOrEmpty(code)) { throw new ArgumentException("Query parameter 'code' does not exist"); } var accessTokenRequest = new HttpRequestMessage(HttpMethod.Get, string.Format("https://graph.facebook.com/v6.0/oauth/access_token?client_id={0}&client_secret={1}&redirect_uri={2}&code={3}", configuration[fbOptions.ConfigurationKeys.AppId], configuration[fbOptions.ConfigurationKeys.AppSecret], UrlEncode(configuration[fbOptions.ConfigurationKeys.RedirectUri]), code )); var httpClient = clientFactory.CreateClient(); var accessTokenResponse = await httpClient.SendAsyncEx <AccessTokenDto>(accessTokenRequest); var fields = string.Join(",", fbOptions.Fields); var userDataRequest = new HttpRequestMessage(HttpMethod.Get, $"https://graph.facebook.com/me?fields={fields}&access_token={accessTokenResponse.AccessToken}"); fbService.UserData = await httpClient.SendAsyncEx <UserDataDto>(userDataRequest); } catch (Exception e) { fbService.ErrorMessage = e.Message; } await next(context); }