public async Task <IResponse> FacebookRegister([FromBody] FacebookRegisterModel facebookRegisterModel) { ExternalLoginResponse externalLoginResponse = new ExternalLoginResponse(); externalLoginResponse.IsModelValid = ModelState.IsValid; if (ModelState.IsValid) { FacebookDataModel facebookData = await FacebookAPI.GetUserLoginData(facebookRegisterModel.AccessToken); ExternalLoginInfo info = CustomExternalLoginInfo.FromLoginModel("Facebook", facebookData); Account account = new Account { UserName = facebookRegisterModel.Username, Email = facebookData.Email }; var result = await _userManager.CreateAsync(account); if (result.Succeeded) { result = await _userManager.AddLoginAsync(account, info); account.SetUpPoints(_context); if (result.Succeeded) { await _signInManager.SignInAsync(account, true); } } externalLoginResponse.CreateResult = result; externalLoginResponse.Errors = result.Errors.Select(x => x.Description); } else { externalLoginResponse.Errors = ModelState.Values.SelectMany(v => v.Errors.Select(b => b.ErrorMessage)); } return(externalLoginResponse); }
public async Task <AccountViewModel> FacebookRegister([FromBody] FacebookRegisterModel model) { if (model == null || !ModelState.IsValid) { throw new CustomException(Errors.INVALID_REQUEST, Errors.INVALID_REQUEST_MSG); } try { //standardize phone number var formatedPhoneNumber = PhoneNumberHelpers.GetFormatedPhoneNumber(model.PhoneNumber); model.PhoneNumber = formatedPhoneNumber; } catch (NumberParseException) { throw new CustomException(Errors.INVALID_PHONE_NUMBER, Errors.INVALID_PHONE_NUMBER_MSG); } var verifyResult = await this.VerifyFacebookAccessToken(model.AccessToken); if (verifyResult.IsValid) { var existAccount = await _accountService.FindByExternalProviderAsync("facebook", verifyResult.FacebookId); if (existAccount != null) { throw new CustomException(Errors.EXTERNAL_LOGIN_EXIST, Errors.EXTERNAL_LOGIN_EXIST_MSG); } var account = new Account { UserName = model.PhoneNumber, PhoneNumber = model.PhoneNumber, AccountType = JobHop.Common.Enums.AccountType.Jobseeker, ExternalLogins = new List <ExternalProvider>() { new ExternalProvider { Provider = "Facebook", ProviderKey = verifyResult.FacebookId } }, AccountPermissions = new List <Models.AccountPermission>() { new Models.AccountPermission { PermissionId = PermissionsList.JOBSEEKER_PERMISSION } } }; account = await _accountService.CreateAsync(account, null, true); //publish a jobseeker account is created message to rabbit mq bus await _rawRabbitBus.PublishAsync(new JobseekerAccountCreated { Id = account.Id, PhoneNumber = account.PhoneNumber, Avatar = model.Avatar, FirstName = model.FirstName, LastName = model.LastName, Status = account.Status }); string smsContent = $"Verification code at JobHop: {account.VerificationCodes.First().VerifyCode}"; //send SMS using Twillio //var message = await MessageResource.CreateAsync(to: new Twilio.Types.PhoneNumber(account.PhoneNumber), from: new Twilio.Types.PhoneNumber(_twilioOptions.FromNumber), body: smsContent); //send SMS using eSMS.vn var response = await _esmsService.SendSMS(account.PhoneNumber, smsContent, 4); var viewModel = account.ToViewModel(); return(viewModel); } else { throw new CustomException(Errors.INVALID_REQUEST, Errors.INVALID_REQUEST_MSG); } }