コード例 #1
0
        public virtual ActionResult Register(RegisterRequest request)
        {
            // If we have to render a view, we don't want Login to have us as a return URL
            // By having this value present in the dictionary BUT null, we don't put "returnUrl" on the Login link at all
            ViewData[Constants.ReturnUrlViewDataKey] = null;

            // TODO: consider client-side validation for unique username
            // TODO: add email validation

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

            User user;

            try
            {
                user = UserService.Create(
                    request.Username,
                    request.Password,
                    request.EmailAddress);
            }
            catch (EntityException ex)
            {
                ModelState.AddModelError(String.Empty, ex.Message);
                return(View());
            }

            if (Config.ConfirmEmailAddresses)
            {
                // Passing in scheme to force fully qualified URL
                var confirmationUrl = Url.ConfirmationUrl(
                    MVC.Users.Confirm(), user.Username, user.EmailConfirmationToken, protocol: Request.Url.Scheme);

                if (Config.ConfirmationsViaAdminEmail)
                {
                    MessageService.SendNewAdminApprovedAccountEmail(Config.AdminConfirmationEmail, user.Username, request.EmailAddress, confirmationUrl);
                }
                else
                {
                    MessageService.SendNewAccountEmail(new MailAddress(request.EmailAddress, user.Username), confirmationUrl);
                }
            }
            return(RedirectToAction(MVC.Users.Thanks()));
        }
コード例 #2
0
        public virtual ActionResult ResendConfirmation(ResendConfirmationEmailViewModel model)
        {
            // We don't want Login to have us as a return URL
            // By having this value present in the dictionary BUT null, we don't put "returnUrl" on the Login link at all
            ViewData[Constants.ReturnUrlViewDataKey] = null;

            if (ModelState.IsValid)
            {
                var usersClaimingEmailAddress = UserService.FindByUnconfirmedEmailAddress(model.Email, model.Username);

                if (usersClaimingEmailAddress.Count == 1)
                {
                    var user            = usersClaimingEmailAddress.SingleOrDefault();
                    var confirmationUrl = Url.ConfirmationUrl(
                        MVC.Users.Confirm(), user.Username, user.EmailConfirmationToken, protocol: Request.Url.Scheme);

                    if (Config.ConfirmationsViaAdminEmail)
                    {
                        MessageService.SendNewAdminApprovedAccountEmail(Config.AdminConfirmationEmail, user.Username, user.UnconfirmedEmailAddress, confirmationUrl);
                    }
                    else
                    {
                        MessageService.SendNewAccountEmail(new MailAddress(user.UnconfirmedEmailAddress, user.Username), confirmationUrl);
                    }

                    return(RedirectToAction(MVC.Users.Thanks()));
                }
                else if (usersClaimingEmailAddress.Count > 1)
                {
                    ModelState.AddModelError("Username", "Multiple users registered with your email address. Enter your username in order to resend confirmation email.");
                }
                else
                {
                    ModelState.AddModelError("Email", "There was an issue resending your confirmation token.");
                }
            }
            return(View(model));
        }