Example #1
0
        public async Task <IActionResult> RegisterExternalConfirmed(RegisterExternalModel model)
        {
            // Так как метод открытый, нужно проверить, что всетаки пользователь прошел  external регистрацию
            var info = await _signInManager.GetExternalLoginInfoAsync();

            if (info == null)
            {
                RedirectToAction(nameof(Login));
            }

            var user = new User(model.UserName);

            var result = await _userManager.CreateAsync(user);

            if (result.Succeeded)
            {
                var claimsResult = await _userManager.AddClaimAsync(user, new Claim(ClaimTypes.Role, Policies.AdministratorPolicy));

                if (claimsResult.Succeeded)
                {
                    var loginResult = await _userManager.AddLoginAsync(user, info);

                    if (loginResult.Succeeded)
                    {
                        await _signInManager.SignInAsync(user, false);

                        return(RedirectToAction(nameof(Index)));
                    }
                }
            }

            return(View(model));
        }
        public async Task <IdentityResult> RegisterExternal(RegisterExternalModel model)
        {
            var info = await AuthenticationManager.GetExternalLoginInfoAsync();

            if (info == null)
            {
                return(new IdentityResult("External login info not found."));
            }

            var user = new AppUser {
                UserName = model.UserName, Email = model.Email ?? ""
            };

            var result = await UserManager.CreateAsync(user);

            if (!result.Succeeded)
            {
                return(result);
            }

            result = await UserManager.AddLoginAsync(user.Id, info.Login);

            if (!result.Succeeded)
            {
                return(result);
            }

            return(await UserManager.AddToRoleAsync(user.Id, DefaultUserRole));
        }
Example #3
0
        public async Task <IHttpActionResult> RegisterExternal(RegisterExternalModel model)
        {
            var verifiedAccessToken = new ParsedExternalAccessToken();

            if (ModelState.IsValid)
            {
                var helper = OauthHelper.Create();
                if (!string.IsNullOrEmpty(model.Provider) && !string.IsNullOrEmpty(model.ExternalAccessToken))
                {
                    verifiedAccessToken = await helper.VerifyExternalAccessToken(model.Provider, model.ExternalAccessToken);

                    if (verifiedAccessToken == null)
                    {
                        return(this.JsonError(HttpStatusCode.BadRequest, 10, "Invalid Provider or External Access Token", ModelState));
                    }
                }

                var loginInfo = await SignInManager.AuthenticationManager.GetExternalLoginInfoAsync();

                ExternalLoginData externalLogin = ExternalLoginData.FromIdentity(loginInfo.ExternalIdentity as ClaimsIdentity);

                var registerGeneral = new RegisterGeneralModel()
                {
                    UserName = model.UserName,
                    Email    = model.Email,
                    //FirstName = externalLogin.UserName.Split(' ')[0], //First Name
                    //LastName = externalLogin.UserName.Split(' ').LastOrDefault(), //Last Name
                    ExternalAccessToken = model.ExternalAccessToken,
                    Provider            = model.Provider
                };

                var regResult = await RegisterInternal(registerGeneral);

                if (regResult.HasError)
                {
                    return(JsonError(regResult.HttpStatusCode, regResult.ServerErrorCode, regResult.ErrorMessage, regResult.ModelState));
                }
                else
                {
                    var result = new
                    {
                        userId = regResult.UserId
                    };
                    return(Json(result));
                }
            }
            else
            {
                return(JsonError(HttpStatusCode.BadRequest, 10, "Warning", ModelState));
            }
        }
Example #4
0
        public ActionResult ExternalLoginRegistration(RegisterExternalModel model, string returnUrl)
        {
            if (_workContext.CurrentProfile.IsAnonymous == false)
            {
                _authenticationService.SignOut();
            }

            var loginInfo = HttpContext.GetOwinContext().Authentication.GetExternalLoginInfo();

            if (loginInfo == null)
            {
                return(RedirectToAction("ExternalLoginFailure"));
            }

            if (ModelState.IsValid)
            {
                var account = new Account
                {
                    Name          = model.Name,
                    Email         = model.Email.ToLower(),
                    ContactNumber = model.ContactNumber,
                    DOB           = model.ParseDateOfBirth().HasValue ? model.ParseDateOfBirth().Value.ToString("dd/MM/yyyy") : null,
                    Username      = model.Email,
                    DisplayContactNumberInDespatch = model.DisplayContactNumberInDespatch,
                    ProfileId = _workContext.CurrentProfile.Id,
                };

                var result = _accountService.ProcessRegistrationWithExternalLogin(account, loginInfo.Login.LoginProvider, loginInfo.Login.ProviderKey, sendEmailFlag: true);

                if (string.IsNullOrEmpty(result.Message))
                {
                    account.Id = result.UserId;
                    _identityExternalAuthService.ExternalSignIn(loginInfo.Email, loginInfo.Login.LoginProvider, loginInfo.Login.ProviderKey, isPersistent: true);

                    return(RedirectToRoute("Register Result", new { resultId = Convert.ToInt32(UserRegistrationType.Standard), returnUrl }));
                }
                else
                {
                    model.LoginProvider = loginInfo.Login.LoginProvider;
                    model.Email         = loginInfo.Email;
                    ModelState.AddModelError(string.Empty, result.Message);
                }
            }

            return(View(model));
        }
        public async Task <IActionResult> RegisterExternal(string id, RegisterExternalModel model)
        {
            var authResult = await HttpContext.AuthenticateAsync("TempCookie");

            if (!authResult.Succeeded)
            {
                return(RedirectToAction("Index", "Home"));
            }

            if (!ModelState.IsValid)
            {
                return(View(model));
            }

            var user = await userService.AddExternal(authResult.Principal.FindFirstValue(ClaimTypes.NameIdentifier), model.Name, model.Email);

            return(await SignInExternal(user));
        }
Example #6
0
 public IActionResult RegisterExternal(RegisterExternalModel model)
 {
     return(View(model));
 }
 public async Task<IHttpActionResult> RegisterExternal(RegisterExternalModel model)
 {
     return await RunTask(() => AccountManager.RegisterExternal(model));
 }
 public async Task <IHttpActionResult> RegisterExternal(RegisterExternalModel model)
 {
     return(await RunTask(() => AccountManager.RegisterExternal(model)));
 }