public async Task <IActionResult> FacebookLogin([FromBody] FacebookLoginViewModel info) { #region Request parameters validation // Information hasn't been initialized. if (info == null) { info = new FacebookLoginViewModel(); TryValidateModel(info); } if (!ModelState.IsValid) { return(BadRequest(ModelState)); } #endregion #region Facebook login & token generate // Do facebook login. var user = await _userDomain.FacebookLoginAsync(info); // Initialize access token. var jsonWebToken = _userDomain.GenerateJwt(user); #endregion return(Ok(jsonWebToken)); }
/// <summary> /// <inheritdoc /> /// </summary> /// <param name="model"></param> /// <param name="cancellationToken"></param> /// <returns></returns> public virtual async Task <User> FacebookLoginAsync(FacebookLoginViewModel model, CancellationToken cancellationToken = default(CancellationToken)) { // Find token information. var tokenInfo = await _externalAuthenticationService.GetFacebookTokenInfoAsync(model.AccessToken); if (tokenInfo == null || string.IsNullOrWhiteSpace(tokenInfo.AccessToken)) { throw new ApiException(HttpMessages.FacebookCodeIsInvalid, HttpStatusCode.Forbidden); } // Get the profile information. var profile = await _externalAuthenticationService.GetFacebookBasicProfileAsync(tokenInfo.AccessToken); if (profile == null) { throw new ApiException(HttpMessages.GoogleCodeIsInvalid, HttpStatusCode.Forbidden); } // Find accounts by searching for email address. var accounts = _unitOfWork.Users.Search(); accounts = accounts.Where(x => x.Email.Equals(profile.Email)); // Get the first matched account. var account = await accounts.FirstOrDefaultAsync(cancellationToken); // Account is available in the system. Check its status. if (account != null) { // Prevent account from logging into system because it is pending. if (account.Status == UserStatus.Pending) { throw new ApiException(HttpMessages.AccountIsPending, HttpStatusCode.Forbidden); } // Prevent account from logging into system because it is deleted. if (account.Status == UserStatus.Disabled) { throw new ApiException(HttpMessages.AccountIsPending, HttpStatusCode.Forbidden); } } else { // Initialize account instance. account = new User(); account.Email = profile.Email; account.Nickname = profile.FullName; account.Role = UserRole.User; account.JoinedTime = _baseTimeService.DateTimeUtcToUnix(DateTime.UtcNow); account.Type = UserKind.Facebook; // Add account to database. _unitOfWork.Users.Insert(account); await _unitOfWork.CommitAsync(cancellationToken); } return(account); }
public async Task <ActionResult> ExternalLoginConfirmation(FacebookLoginViewModel model, string returnUrl) { if (User.Identity.IsAuthenticated) { return(new HttpStatusCodeResult(200)); } if (!ModelState.IsValid) { return(new HttpStatusCodeResult(400)); } var user = new ApplicationUser { UserName = model.Email, Email = model.Email, BirthDate = model.BirthDate, }; var manager = new UserManager <ApplicationUser>(new UserStore <ApplicationUser>(new ApplicationDbContext())); var result = await manager.CreateAsync(user); if (result.Succeeded) { result = await manager.AddLoginAsync(user.Id, new UserLoginInfo("Facebook", "155273308418309")); if (result.Succeeded) { return(Json(new { id = user.Id, email = user.Email })); } } return(Json(new { id = 1, email = "admin", })); }
public async Task <IActionResult> LoginFacebook([FromBody] FacebookLoginViewModel flvm) { Log.Info("Facebook login flow started"); if (string.IsNullOrEmpty(flvm.userid) || string.IsNullOrEmpty(flvm.firstName)) { return(BadRequest(ResponseViewModel.GetErrorModel("Missing Parameters"))); } User user = await _lService.LoginFacebook(flvm.userid); if (string.IsNullOrEmpty(user.FirstName)) { //TODO handle this in another way. //used to catch cast errors in .LoginFacebook return(BadRequest(ResponseViewModel.GetErrorModel("Could not log facebook user in."))); } else if (user != null) { // user exists return(Ok(ResponseViewModel.GetSuccessModel("Facebook user was logged in."))); } //User doesnt exist, create it. user = await _uService.CreateFacebookUser(flvm.userid, flvm.firstName); if (user == null) { string msg = "Could not create facebook user."; Log.Warn(msg); return(BadRequest(ResponseViewModel.GetSuccessModel(msg))); } //Response Log.Info("Login flow Succes"); return(Ok(ResponseViewModel.GetSuccessModel("Facebook user was created and logged in."))); }