예제 #1
0
        public async Task <ActionResult> VerifyPhoneNumber(VerifyPhoneNumberViewModel model)
        {
            if (!ModelState.IsValid)
            {
                return(View(model));
            }
            var result = await UserManager.ChangePhoneNumberAsync(User.Identity.GetUserId(), model.PhoneNumber, model.Code);

            if (result.Succeeded)
            {
                var user = await UserManager.FindByIdAsync(User.Identity.GetUserId());

                if (user != null)
                {
                    await SignInManager.SignInAsync(user, isPersistent : false, rememberBrowser : false);
                }
                return(RedirectToAction("Index", new { Message = ManageMessageId.AddPhoneSuccess }));
            }
            // Jeśli dotarliśmy tak daleko, oznacza to, że wystąpił błąd. Wyświetl ponownie formularz
            ModelState.AddModelError("", "Nie można zweryfikować numeru telefonu");
            return(View(model));
        }
예제 #2
0
        public async Task <ActionResult> VerifyPhoneNumber(VerifyPhoneNumberViewModel model)
        {
            if (!ModelState.IsValid)
            {
                return(View(model));
            }
            var result = await UserManager.ChangePhoneNumberAsync(User.Identity.GetUserId(), model.PhoneNumber, model.Code);

            if (result.Succeeded)
            {
                var user = await UserManager.FindByIdAsync(User.Identity.GetUserId());

                if (user != null)
                {
                    await SignInManager.SignInAsync(user, isPersistent : false, rememberBrowser : false);
                }
                return(RedirectToAction("Index", new { Message = ManageMessageId.AddPhoneSuccess }));
            }
            // If we got this far, something failed, redisplay form
            ModelState.AddModelError("", "Failed to verify phone");
            return(View(model));
        }
예제 #3
0
        public async Task <ActionResult> VerifyPhoneNumber(VerifyPhoneNumberViewModel model)
        {
            if (!ModelState.IsValid)
            {
                return(View(model));
            }
            var result = await UserManager.ChangePhoneNumberAsync(User.Identity.GetUserId(), model.PhoneNumber, model.Code);

            if (result.Succeeded)
            {
                var user = await UserManager.FindByIdAsync(User.Identity.GetUserId());

                if (user != null)
                {
                    await SignInManager.SignInAsync(user, isPersistent : false, rememberBrowser : false);
                }
                return(RedirectToAction("Index", new { Message = ManageMessageId.AddPhoneSuccess }));
            }
            // 如果執行到這裡,發生某項失敗,則重新顯示表單
            ModelState.AddModelError("", "無法驗證號碼");
            return(View(model));
        }
예제 #4
0
        public async Task <ActionResult> VerifyPhoneNumber(VerifyPhoneNumberViewModel model)
        {
            if (!ModelState.IsValid)
            {
                return(View(model));
            }
            var result = await UserManager.ChangePhoneNumberAsync(User.Identity.GetUserId(), model.PhoneNumber, model.Code);

            if (result.Succeeded)
            {
                var user = await UserManager.FindByIdAsync(User.Identity.GetUserId());

                if (user != null)
                {
                    await SignInManager.SignInAsync(user, isPersistent : false, rememberBrowser : false);
                }
                return(RedirectToAction("Index", new { Message = ManageMessageId.AddPhoneSuccess }));
            }
            // Это сообщение означает наличие ошибки; повторное отображение формы
            ModelState.AddModelError("", "Не удалось проверить телефон");
            return(View(model));
        }
예제 #5
0
        public async Task <ActionResult> VerifyPhoneNumber(VerifyPhoneNumberViewModel model)
        {
            if (!ModelState.IsValid)
            {
                return(View(model));
            }
            var result = await UserManager.ChangePhoneNumberAsync(User.Identity.GetUserId(), model.PhoneNumber, model.Code);

            if (result.Succeeded)
            {
                var user = await UserManager.FindByIdAsync(User.Identity.GetUserId());

                if (user != null)
                {
                    await SignInManager.SignInAsync(user, isPersistent : false, rememberBrowser : false);
                }
                return(RedirectToAction("Index", new { Message = ManageMessageId.AddPhoneSuccess }));
            }
            // Si llegamos a este punto, es que se ha producido un error, volvemos a mostrar el formulario
            ModelState.AddModelError("", "No se ha podido comprobar el teléfono");
            return(View(model));
        }
예제 #6
0
        public async Task <ActionResult> VerifyPhoneNumber(VerifyPhoneNumberViewModel model)
        {
            if (!ModelState.IsValid)
            {
                return(View(model));
            }
            var result = await UserManager.ChangePhoneNumberAsync(User.Identity.GetUserId(), model.PhoneNumber, model.Code);

            if (result.Succeeded)
            {
                var user = await UserManager.FindByIdAsync(User.Identity.GetUserId());

                if (user != null)
                {
                    await SignInAsync(user, isPersistent : false);
                }
                return(RedirectToAction("Index", new { Message = ManageMessageId.AddPhoneSuccess }));
            }
            // No caso de falha, reexibir a view.
            ModelState.AddModelError("", "Falha ao adicionar telefone");
            return(View(model));
        }
예제 #7
0
        public async Task <ActionResult> VerifyPhoneNumber(VerifyPhoneNumberViewModel model)
        {
            if (!ModelState.IsValid)
            {
                return(View(model));
            }
            var result = await UserManager.ChangePhoneNumberAsync(User.Identity.GetUserId(), model.PhoneNumber, model.Code);

            if (result.Succeeded)
            {
                var user = await UserManager.FindByIdAsync(User.Identity.GetUserId());

                if (user != null)
                {
                    await SignInManager.SignInAsync(user, isPersistent : false, rememberBrowser : false);
                }
                return(RedirectToAction("Index", new { Message = ManageMessageId.AddPhoneSuccess }));
            }
            //Si nous sommes arrivés là, quelque chose a échoué, réafficher le formulaire
            ModelState.AddModelError("", "La vérification du téléphone a échoué");
            return(View(model));
        }
예제 #8
0
        public async Task <IActionResult> VerifyPhoneNumber(VerifyPhoneNumberViewModel model)
        {
            if (!ModelState.IsValid)
            {
                return(View(model));
            }
            var user = await GetCurrentUserAsync();

            if (user != null)
            {
                var result = await _userManager.ChangePhoneNumberAsync(user, model.PhoneNumber, model.Code);

                if (result.Succeeded)
                {
                    await _signInManager.SignInAsync(user, isPersistent : false);

                    return(RedirectToAction(nameof(Index), new { Message = ManageMessageId.AddPhoneSuccess }));
                }
            }
            // If we got this far, something failed, redisplay the form
            ModelState.AddModelError(string.Empty, "Failed to verify phone number");
            return(View(model));
        }
예제 #9
0
        public async Task <ActionResult> VerifyPhoneNumber(VerifyPhoneNumberViewModel model)
        {
            if (ModelState.IsValid)
            {
                var userId = User.Identity.GetUserId();
                var result = await UserManager.ChangePhoneNumberAsync(userId, model.PhoneNumber, model.Code);

                if (result.Succeeded)
                {
                    var user = await UserManager.FindByIdAsync(userId);

                    if (user != null)
                    {
                        await SignInAsync(user, isPersistent : false);
                    }
                    return(RedirectToProfile(ManageMessageId.ChangePhoneNumberSuccess));
                }
            }

            // If we got this far, something failed, redisplay form
            ViewBag.Message = ManageMessageId.ChangePhoneNumberFailure.ToString();
            return(await VerifyPhoneNumber(model.PhoneNumber));
        }
예제 #10
0
        public async Task <ActionResult> VerifyPhoneNumber(VerifyPhoneNumberViewModel model)
        {
            if (!ModelState.IsValid)
            {
                return(View(model));
            }
            //User.Identity.GetUserId() return the current id of the user loged in from this request to this server code from his browser
            var result = await UserManager.ChangePhoneNumberAsync(User.Identity.GetUserId(), model.PhoneNumber, model.Code); // if every thing is ok it will  set the PhoneNumberConfirmed feild in database for this phone number to true

            if (result.Succeeded)
            {
                var user = await UserManager.FindByIdAsync(User.Identity.GetUserId());

                if (user != null)
                {
                    await SignInManager.SignInAsync(user, isPersistent : false, rememberBrowser : false);
                }
                return(RedirectToAction("Index", new { Message = ManageMessageId.AddPhoneSuccess }));
            }
            // If we got this far, something failed, redisplay form
            ModelState.AddModelError("", "Failed to verify phone");
            return(View(model));
        }
        public async Task VerifyPhoneNumberPostInvokesSignInAsyncWithCorrectPaarmetersWhenUserIsNotNullAndPhoneNumberChangeWasSuccessful()
        {
            //Arrange
            var userId      = "userId";
            var token       = "token";
            var phoneNumber = "phone";
            var user        = UserWithCompleteProfile(userId, phoneNumber);

            var model = new VerifyPhoneNumberViewModel {
                PhoneNumber = phoneNumber, Code = token
            };
            var userManager = MockHelper.CreateUserManagerMock();

            userManager.Setup(x => x.GetUserId(It.IsAny <ClaimsPrincipal>())).Returns(userId);
            userManager.Setup(x => x.ChangePhoneNumberAsync(It.IsAny <ApplicationUser>(),
                                                            It.IsAny <string>(),
                                                            It.IsAny <string>())).ReturnsAsync(IdentityResult.Success);

            var signInManager = MockHelper.CreateSignInManagerMock(userManager);

            var mediator = new Mock <IMediator>();

            mediator.Setup(x => x.SendAsync(It.IsAny <UserByUserIdQuery>())).ReturnsAsync(user);

            var controller = new ManageController(userManager.Object, signInManager.Object, mediator.Object);

            controller.SetFakeUser(userId);

            //Act
            await controller.VerifyPhoneNumber(model);

            //Assert
            signInManager.Verify(x => x.SignInAsync(It.Is <ApplicationUser>(u => u == user),
                                                    It.Is <bool>(p => !p),
                                                    It.IsAny <string>()),
                                 Times.Once);
        }
        public async Task VerifyPhoneNumberPostInvokesChangePhoneNumberAsyncWithCorrectParametersWhenUserIsNotNull()
        {
            //Arrange
            var userId = "userId";
            var token  = "token";
            var user   = new ApplicationUser {
                Id = userId
            };
            var model = new VerifyPhoneNumberViewModel {
                PhoneNumber = "phone", Code = token
            };

            var userManager = MockHelper.CreateUserManagerMock();

            userManager.Setup(x => x.GetUserId(It.IsAny <ClaimsPrincipal>())).Returns(userId);
            userManager.Setup(x => x.ChangePhoneNumberAsync(It.IsAny <ApplicationUser>(),
                                                            It.IsAny <string>(),
                                                            It.IsAny <string>())).ReturnsAsync(new IdentityResult());

            var signInManagerMock = MockHelper.CreateSignInManagerMock(userManager);
            var mediator          = new Mock <IMediator>();

            mediator.Setup(x => x.SendAsync(It.IsAny <UserByUserIdQuery>())).ReturnsAsync(user);

            var controller = new ManageController(userManager.Object, signInManagerMock.Object, mediator.Object);

            controller.SetFakeUser(userId);

            //Act
            await controller.VerifyPhoneNumber(model);

            //Assert
            userManager.Verify(x => x.ChangePhoneNumberAsync(It.Is <ApplicationUser>(u => u.Id == userId),
                                                             It.Is <string>(p => p == model.PhoneNumber),
                                                             It.Is <string>(t => t == token)),
                               Times.Once);
        }
예제 #13
0
 public async Task<ActionResult> VerifyPhoneNumber(VerifyPhoneNumberViewModel model)
 {
     if (!ModelState.IsValid)
     {
         return View(model);
     }
     var result = await UserManager.ChangePhoneNumberAsync(User.Identity.GetUserId(), model.PhoneNumber, model.Code);
     if (result.Succeeded)
     {
         var user = await UserManager.FindByIdAsync(User.Identity.GetUserId());
         if (user != null)
         {
             await SignInManager.SignInAsync(user, isPersistent: false, rememberBrowser: false);
         }
         return RedirectToAction("Index", new { Message = ManageMessageId.AddPhoneSuccess });
     }
     // If we got this far, something failed, redisplay form
     ModelState.AddModelError("", "Failed to verify phone");
     return View(model);
 }
예제 #14
0
 public async Task<IActionResult> VerifyPhoneNumber(VerifyPhoneNumberViewModel model)
 {
     if (!ModelState.IsValid)
     {
         return View(model);
     }
     var user = await GetCurrentUserAsync();
     if (user != null)
     {
         var result = await _userManager.ChangePhoneNumberAsync(user, model.PhoneNumber, model.Code);
         if (result.Succeeded)
         {
             await _signInManager.SignInAsync(user, isPersistent: false);
             return RedirectToAction(nameof(Index), new { Message = ManageMessageId.AddPhoneSuccess });
         }
     }
     // If we got this far, something failed, redisplay the form
     ModelState.AddModelError(string.Empty, "Failed to verify phone number");
     return View(model);
 }
예제 #15
0
 public async Task<ActionResult> VerifyPhoneNumber(VerifyPhoneNumberViewModel model)
 {
     if (!ModelState.IsValid)
     {
         return View(model);
     }
     var result = await UserManager.ChangePhoneNumberAsync(User.Identity.GetUserId(), model.PhoneNumber, model.Code);
     if (result.Succeeded)
     {
         var user = await UserManager.FindByIdAsync(User.Identity.GetUserId());
         if (user != null)
         {
             await SignInManager.SignInAsync(user, isPersistent: false, rememberBrowser: false);
         }
         return RedirectToAction("Index", new { Message = ManageMessageId.AddPhoneSuccess });
     }
     // Si llegamos a este punto, es que se ha producido un error, volvemos a mostrar el formulario
     ModelState.AddModelError("", "No se ha podido comprobar el teléfono");
     return View(model);
 }
예제 #16
0
        public async Task<ActionResult> VerifyPhoneNumber(VerifyPhoneNumberViewModel model)
        {
            if (!this.ModelState.IsValid)
            {
                return this.View(model);
            }

            var result = await this.UserManager.ChangePhoneNumberAsync(this.User.Identity.GetUserId(), model.PhoneNumber, model.Code);
            if (result.Succeeded)
            {
                var user = await this.UserManager.FindByIdAsync(this.User.Identity.GetUserId());
                if (user != null)
                {
                    await this.SignInManager.SignInAsync(user, isPersistent: false, rememberBrowser: false);
                }

                return this.RedirectToAction("Index", new { Message = ManageMessageId.AddPhoneSuccess });
            }

            this.ModelState.AddModelError(string.Empty, "Failed to verify phone");
            return this.View(model);
        }
 public async Task<ActionResult> VerifyPhoneNumber(VerifyPhoneNumberViewModel model)
 {
     if (!ModelState.IsValid)
     {
         return View(model);
     }
     var result = await UserManager.ChangePhoneNumberAsync(User.Identity.GetUserId(), model.PhoneNumber, model.Code);
     if (result.Succeeded)
     {
         var user = await UserManager.FindByIdAsync(User.Identity.GetUserId());
         if (user != null)
         {
             await SignInManager.SignInAsync(user, isPersistent: false, rememberBrowser: false);
         }
         return RedirectToAction("Index", new { Message = ManageMessageId.AddPhoneSuccess });
     }
     // Это сообщение означает наличие ошибки; повторное отображение формы
     ModelState.AddModelError("", "Не удалось проверить телефон");
     return View(model);
 }
 public async Task<ActionResult> VerifyPhoneNumber(VerifyPhoneNumberViewModel model)
 {
     if (!ModelState.IsValid)
     {
         return View(model);
     }
     var result = await UserManager.ChangePhoneNumberAsync(User.Identity.GetUserId(), model.PhoneNumber, model.Code);
     if (result.Succeeded)
     {
         var user = await UserManager.FindByIdAsync(User.Identity.GetUserId());
         if (user != null)
         {
             await SignInManager.SignInAsync(user, isPersistent: false, rememberBrowser: false);
         }
         return RedirectToAction("Index", new { Message = ManageMessageId.AddPhoneSuccess });
     }
     // 如果我们进行到这一步时某个地方出错,则重新显示表单
     ModelState.AddModelError("", "无法验证电话号码");
     return View(model);
 }
        public async Task<ActionResult> VerifyPhoneNumber(VerifyPhoneNumberViewModel model)
        {
            if (!ModelState.IsValid)
            {
                return View(model);
            }

            ObjectId userId = User.Identity.GetUserId2<ObjectId>();
            IdentityResult result = await _userManager.ChangePhoneNumberAsync(userId
                , model.PhoneNumber, model.Code);

            if (result.Succeeded)
            {
                var user = await _userManager.FindByIdAsync(User.Identity.GetUserId2<ObjectId>());
                if (user != null)
                {
                    await SignInAsync(user, isPersistent: false);
                }
                return RedirectToAction("Index", new { Message = ManageMessageId.AddPhoneSuccess });
            }

            // If we got this far, something failed, redisplay form
            string errorMessage = IdentityResourceHelper.Load(IdentitySettings.IdentityResource, "ManageController_VerifyPhoneNumber_Error");
            ModelState.AddModelError("", errorMessage);
            return View(model);
        }
예제 #20
0
        public async Task<ActionResult> VerifyPhoneNumber(VerifyPhoneNumberViewModel model)
        {
            if (!ModelState.IsValid)
            {
                return View(model);
            }
            //The ChangePhoneNumberAsync method checks the posted security code. 
            //If the code is correct, the phone number is added to the PhoneNumber field of the AspNetUsers table. 
            var result = await UserManager.ChangePhoneNumberAsync(User.Identity.GetUserId(), model.PhoneNumber, model.Code);

            //If that call is successful, the  SignInAsync method is called:
            if (result.Succeeded)
            {
                var user = await UserManager.FindByIdAsync(User.Identity.GetUserId());
                if (user != null)
                {

                     //The isPersistent parameter sets whether the authentication session is persisted across multiple requests.

                    //When you change your security profile, a new security stamp is generated and stored in the SecurityStamp field of the AspNetUsers table. 
                    //Note, the SecurityStamp field is different from the security cookie. 
                    //The security cookie is not stored in the AspNetUsers table (or anywhere else in the Identity DB). 
                    //The security cookie token is self-signed using DPAPI and is created with the UserId, SecurityStamp and expiration time information.

                    //The cookie middleware checks the cookie on each request. 
                    //The SecurityStampValidator method in the Startup class hits the DB and checks security stamp periodically, as specified with the validateInterval. 
                    //This only happens every 30 minutes (in our sample) unless you change your security profile. //
                    //The 30 minute interval was chosen to minimize trips to the database. 

                    //The SignInAsync method needs to be called when any change is made to the security profile. 
                    //When the security profile changes, the database is updates the SecurityStamp field, and without calling the SignInAsync 
                    //method you would stay logged in only until the next time the OWIN pipeline hits the database (the validateInterval). 
                    //You can test this by changing the SignInAsync method to return immediately, and setting the cookie validateInterval 
                    //property from 30 minutes to 5 seconds:

                    //private async Task SignInAsync(ApplicationUser user, bool isPersistent)
                    //{
                    //    // Clear the temporary cookies used for external and two factor sign ins
                    //    AuthenticationManager.SignOut(DefaultAuthenticationTypes.ExternalCookie,
                    //       DefaultAuthenticationTypes.TwoFactorCookie);
                    //    AuthenticationManager.SignIn(new AuthenticationProperties
                    //    {
                    //        IsPersistent = isPersistent
                    //    },
                    //       await user.GenerateUserIdentityAsync(UserManager));
                    //}

                    await SignInManager.SignInAsync(user, isPersistent: false, rememberBrowser: false);
                }
                return RedirectToAction("Index", new { Message = ManageMessageId.AddPhoneSuccess });
            }
            // If we got this far, something failed, redisplay form
            ModelState.AddModelError("", "Failed to verify phone");
            return View(model);
        }
        public void VerifyPhoneNumber(
         VerifyPhoneNumberViewModel model,
         ModelMethodContext context)
        {
            if (!context.ModelState.IsValid) return;

             var userId = _context.User.Identity.GetUserId();
             var result = _userManager.ChangePhoneNumber(
            userId, model.PhoneNumber, model.Code);

             if (result.Succeeded)
             {
            var user = _userManager.FindById(userId);

            if (user != null)
            {
               SignIn(user, false);
               RedirectToManager(ManageMessageId.AddPhoneSuccess);
            }
             }
             else
             {
            context.ModelState.AddModelError("", "Invalid verification code");
             }
        }