title: How to make Confirmation link activate accounts in MVC4?
body: <p>I am building an MVC 4 application starting with the default internet application. My goal is to send a confirmation email to users as they register to the website, i have managed to send the confirmation email but when i click on it the account is not being confirmed. </p>
  
  <p><strong>Note: I know the Register action is crowded, i will separate pieces to different files when i make it work.</strong></p>
  
  <p>*<strong><em>This is what i have done:</em>*</strong></p>
  
  <p><strong>Register Action</strong></p>
  
  <pre><code>[HttpPost]
      [AllowAnonymous]
      [ValidateAntiForgeryToken]
      public ActionResult Register(RegisterModel model)
      {
          if (ModelState.IsValid)
          {
              try //CreateUserAndAccount
              {
                  var token = WebSecurity.CreateUserAndAccount(model.UserName, model.Password, null, true);
                  if (token != null)
                  {
                      var hosturl =
                          System.Web.HttpContext.Current.Request.Url.GetLeftPart(UriPartial.Authority) +
                          "/Account/ConfirmAccount?token=" + token;
  
                      var confirmationLink = string.Format("&lt;a href=\"{0}\"&gt;Clink to confirm your registration&lt;/a&gt;",
                                                           hosturl);
  
  
  
  
                      var message = new MailMessage("komengem@gmail.com", model.UserName)
                      {
                          Subject = "Please confirm your email",
                          Body = confirmationLink
                      };
  
                      var client = new SmtpClient();
                      client.EnableSsl = true;
                      client.Send(message);
                  }
  
                  TempData["message"] = string.Format(
                      "Thank you for registering. An email has been sent to {0}. " +
                      "Please check your email and use the enclosed link to finish registration.", model.UserName);
                  return RedirectToAction("Index", "Home");
              }
              catch (MembershipCreateUserException e)
              {
                  ModelState.AddModelError("", ErrorCodeToString(e.StatusCode));
              }
          }
  </code></pre>
  
  <p><strong>ConfirmAcount Action</strong></p>
  
  <pre><code>public ActionResult ConfirmAccount(string ID)
      {
          //return View("ConfirmAccount");
          var confirmationToken = Request["token"];
          if (!String.IsNullOrEmpty(confirmationToken))
          {
              var user = WebSecurity.CurrentUserName;
              WebSecurity.ConfirmAccount(confirmationToken);
              WebSecurity.Login(user, null);
              return View("Welcome");
          }
  
          TempData["message"] = string.Format(
                      "Your account was not confirmed, please try again or contact the website adminstrator.");
          return RedirectToAction("Index", "Home");            
      }
  </code></pre>
  
  <p><strong>Also Tried</strong></p>
  
  <pre><code>public ActionResult ConfirmAccount(string ID)
      {
          if (string.IsNullOrEmpty(ID) || (!Regex.IsMatch(ID,
                          @"[0-9a-f]{8}\-([0-9a-f]{4}\-){3}[0-9a-f]{12}")))
          {
              TempData["tempMessage"] =
                  "The user account is not valid. Please try clicking the link in your email again.";
              return View();
          }
          MembershipUser user = Membership.GetUser(new Guid(ID));
  
          if (!user.IsApproved)
          {
              user.IsApproved = true;
              Membership.UpdateUser(user);
              FormsAuthentication.SetAuthCookie(user.UserName, false);
              return RedirectToAction("Login");
          }
          WebSecurity.Logout();
          TempData["tempMessage"] = "You have already confirmed your email address... please log in.";
          return RedirectToAction("Login");
      }      
  </code></pre>
  
  <p>Could anyone please show me how to make this work, or perhaps suggest a different way to make this work??</p>