Esempio n. 1
0
        /// <summary>
        /// 初始化 <see cref="User"/> 类的新实例。
        /// </summary>
        /// <param name="username">用户名。</param>
        /// <param name="password">用户密码。</param>
        /// <exception cref="ArgumentNullException">
        ///     <paramref name="username"/> 为 null
        ///     或
        ///     <paramref name="password"/> 为 null。
        /// </exception>
        public User(string username, string password)
        {
            Contract.NotNull(username, nameof(username));
            Contract.NotNull(password, nameof(password));

            Id           = ObjectId.GenerateNewId();
            Username     = username;
            PasswordHash = PasswordUtils.GetPasswordHash(password);
            JoinTime     = DateTime.UtcNow;
        }
Esempio n. 2
0
        /// <summary>
        /// 更新给定用户的密码。
        /// </summary>
        /// <param name="username">要更新的用户的用户名。</param>
        /// <param name="password">要更新的用户的新密码。</param>
        /// <returns>是否成功地更新了用户的密码。</returns>
        /// <exception cref="ArgumentNullException">
        ///     <paramref name="username"/> 为 null
        ///     或
        ///     <paramref name="password"/> 为 null。
        /// </exception>
        /// <exception cref="RepositoryException">访问底层数据源时出现错误。</exception>
        public async Task <bool> UpdatePasswordAsync(string username, string password)
        {
            Contract.NotNull(username, nameof(username));
            Contract.NotNull(password, nameof(password));

            var passwordHash = PasswordUtils.GetPasswordHash(password);
            var updateResult = await ThrowRepositoryExceptionOnErrorAsync(
                async (collection, _) => await collection.UpdateOneAsync(
                    GetKeyFilter(username),
                    Builders <User> .Update.Set(u => u.PasswordHash, passwordHash)));

            return(updateResult.MatchedCount == 1);
        }