/// <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; }
/// <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); }