예제 #1
0
        public ActionResult Register(RegisterModel model)
        {
            if (ModelState.IsValid)
            {
                // Attempt to register the user
                var requireEmailConfirmation =
                    Convert.ToBoolean(ConfigurationManager.AppSettings["requireEmailConfirmation"] ?? "false");
                var token = webSecurity.CreateUserAndAccount(model.UserName, model.Password,
                                                                    requireConfirmationToken: requireEmailConfirmation);

                if (requireEmailConfirmation)
                {
                    // Send email to user with confirmation token
                    if (Request.Url != null)
                    {
                        string hostUrl = Request.Url.GetComponents(UriComponents.SchemeAndServer, UriFormat.Unescaped);
                        string confirmationUrl = hostUrl +
                                                 VirtualPathUtility.ToAbsolute("~/Account/Confirm?confirmationCode=" +
                                                                               HttpUtility.UrlEncode(token));

                        const string fromAddress = "Your Email Address";
                        var toAddress = model.Email;
                        const string subject =
                            "Thanks for registering but first you need to confirm your registration...";
                        var body =
                            string.Format(
                                "Your confirmation code is: {0}. Visit <a href=\"{1}\">{1}</a> to activate your account.",
                                token, confirmationUrl);

                        // NOTE: This is just for sample purposes
                        // It's generally a best practice to not send emails (or do anything on that could take a long time and potentially fail)
                        // on the same thread as the main site
                        // You should probably hand this off to a background MessageSender service by queueing the email, etc.
                        messengerService.Send(fromAddress, toAddress, subject, body, true);
                    }

                    // Thank the user for registering and let them know an email is on its way
                    return RedirectToAction("Thanks", "Account");
                }
                // Navigate back to the homepage and exit
                webSecurity.Login(model.UserName, model.Password);
                return RedirectToAction("Index", "Home");
            }

            // If we got this far, something failed, redisplay form
            ViewBag.PasswordLength = webSecurity.MinPasswordLength;
            return View(model);
        }
        public ActionResult Register(RegisterModel model)
        {
            if (ModelState.IsValid)
            {
                // Attempt to register the user
                var requireEmailConfirmation = false;
                var token = WebSecurityService.CreateUserAndAccount(model.UserName, model.Password,
                                                                    requireEmailConfirmation);

                if (requireEmailConfirmation)
                {
                    // TODO: Send email to user with confirmation token

                    // Thank the user for registering and let them know an email is on its way
                    return RedirectToAction("Thanks", "Account");
                }
                else
                {
                    // Navigate back to the homepage and exit
                    WebSecurityService.Login(model.UserName, model.Password);
                    return RedirectToAction("Index", "Home");
                }
            }

            // If we got this far, something failed, redisplay form
            ViewBag.PasswordLength = WebSecurityService.MinPasswordLength;
            return View(model);
        }