示例#1
0
        public async Task <User> Register(string username, string email, string password)
        {
            if (await EmailExists(email))
            {
                Alertify.Push("Email address already exists", AlertType.Error);
                return(null);
            }

            if (await UsernameExists(username))
            {
                Alertify.Push("Username already exists", AlertType.Error);
                return(null);
            }

            var passwordSalt       = Utils.CreateSalt();
            var saltedPasswordHash = Utils.GenerateHash(password, passwordSalt);

            var user = new UserBuilder()
                       .SetUserData(username, email)
                       .SetPassword(saltedPasswordHash, passwordSalt)
                       .Build();

            database.UserRepository.Add(user);

            if (await database.Complete())
            {
                var registerToken = Token.Create(TokenType.Register);
                user.Tokens.Add(registerToken);

                if (await database.Complete())
                {
                    string encryptedToken = cryptoService.Encrypt(registerToken.Code);
                    string callbackUrl    = $"{Configuration.GetValue<string>(AppSettingsKeys.ServerAddress)}Auth/ConfirmAccount?email={user.Email}&token={encryptedToken}";
                    return(await emailSender.Send(Constants.ActivationAccountEmail(email, username, callbackUrl)) ? user : null);
                }
                return(null);
            }
            else
            {
                Alertify.Push("Creating account failed", AlertType.Error);
                return(null);
            }
        }
示例#2
0
        public async Task <IActionResult> OnPostAsync()
        {
            if (!ModelState.IsValid)
            {
                return(Page());
            }

            if (await authValidationService.EmailExists(UserRegister.Email))
            {
                ModelState.TryAddModelError(ErrorCodes.EmailExists, "Email address already exists");
                return(Page());
            }

            if (await authValidationService.UsernameExists(UserRegister.Username))
            {
                ModelState.TryAddModelError(ErrorCodes.UsernameExists, "Username already exists");
                return(Page());
            }

            var authResult = await authService.SignUp(UserRegister.Email, UserRegister.Password, UserRegister.Username);

            if (authResult != null)
            {
                var emailSent = await emailSender.Send(Constants.ActivationAccountEmail(UserRegister.Email,
                                                                                        $"{Configuration.GetValue<string>(AppSettingsKeys.ServerAddress)}Auth/ConfirmAccount?userId={authResult.User.Id}&code={authResult.Token}"));

                if (emailSent)
                {
                    Alertify.Push($"Activation email was sent to: {UserRegister.Email}", AlertType.Info);
                    return(Page());
                }

                Alertify.Push("There was a problem during sending activation email", AlertType.Error);
            }

            return(Page());
        }