The war powers resolution is not binding on the president and would not require his signature. But House Speaker Nancy Pelosi nonetheless insisted it "has real teeth" because "it is a statement of the Congress of the United States."
The measure will "protect American lives and values" by limiting Trump's military actions, Pelosi said. "The administration must de-escalate and must prevent further violence.''
The White House called the resolution "ridiculous" and "completely misguided."
And Trump, at a campaign rally in Toledo, Ohio, claimed he had no obligation to give lawmakers advance warning, saying Democrats like Pelosi "want us to tell them so they can leak it to their friends in the corrupt media."
The House passed the measure, 224-194, with just three Republicans voting in support. Eight Democrats opposed the measure.
A similar proposal by Sen. Tim Kaine, D-Va., faces an uphill fight in the GOP-run Senate. Kaine's efforts received a boost Thursday as Republican Sen. Todd Young of Indiana, an ex-Marine, said he might support the war powers measure. Two other Republican senators said Wednesday they would back Kaine's plan.
"We are members of a separate and distinct branch of government. It is our duty not to take anyone's word for things as we are dealing with matters of life and death," Young said, adding that he wished Trump administration officials had provided more intelligence information during a briefing Wednesday on a U.S. drone strike that killed a top Iranian general.
Pelosi, in announcing the House vote, called the killing of Gen. Qassem Soleimani "provocative and disproportionate."
Louisiana Rep. Steve Scalise, the No. 2 House Republican, denounced the Democratic measure as little more than "a press release designed to attack President Trump,'' while House Minority Leader Kevin McCarthy of California called it a "meaningless vote" on a measure that will never be sent to the president or "limit his constitutional authority to defend the American people.''
White House spokesman Hogan Gidley said, "This House resolution tries to undermine the ability of the U.S. Armed Forces to prevent terrorist activity by Iran and its proxies, and attempts to hinder the President's authority to protect America and our interests in the region from the continued threats."
The House vote came a day after the Trump administration briefed lawmakers on its actions in Iran. Democrats and several Republicans called the briefings inadequate, adding that officials did not provide enough details about why the attack was justified.
Vice President Mike Pence said Thursday that Soleimani "was traveling the region making plans to bring an attack against American personnel and American forces." He said it was not possible to share full details of the intelligence with lawmakers.
"When it comes to intelligence we have to protect sources and methods, there's only certain amount we can share with every member of Congress," Pence said on ABC's "Good Morning America." "But those of us who have seen all the evidence know that there was a compelling case of imminent threat against American personnel."
Trump said Thursday that he "had calls from numerous senators and numerous congressmen and women saying it was the greatest presentation they've ever had.''
Referring to criticism by GOP Sens. Mike Lee and Rand Paul, Trump said: "They want information that honestly I think is very hard to get. ... It really had to do with sources and information that we had that really should remain at a very high level.''
Lee, a conservative from Utah, said the briefing by Secretary of State Mike Pompeo and other officials was "probably the worst briefing I've seen, at least on a military issue," in the nine years he's served in the Senate.
Paul, of Kentucky, said administration officials justified killing Soleimani based on the 2002 authorization of force in Iraq. "That is absurd. That's an insult,'' he said.
Pelosi scheduled the House vote after Iran retaliated for the Soleimani killing by launching missiles at two military bases in Iraq that house American troops. No casualties were reported.
"Congress hereby directs the President to terminate the use of United States Armed Forces to engage in hostilities in or against Iran or any part of its government or military" unless Congress declares war on that country or enacts legislation authorizing use of force to prevent an attack on the U.S. and its forces, the five-page resolution states.
The resolution's sponsor, freshman Rep. Elissa Slotkin, D-Mich., said it is intended to "make clear that if the president wants to take us to war, he must get authorization from Congress.''
If loved ones are going to be sent to fight in a protracted war, "the president owes the American people a public conversation about why, and for what ends,'' said Slotkin, a former CIA analyst and Pentagon official who served in Iraq.
Members of Congress have a constitutional responsibility to uphold in authorizing use of military force, Slotkin said, adding, "We are owed concrete, specific details on strategy.''
Trump did not consult with congressional leaders ahead of the attack that killed the Iranian general and afterward sent Congress a notification explaining the rationale, but kept it classified.
Congress has allowed its war powers role to erode since the passage of Authorization for Use of Military Force in 2001 to fight terrorism after the 9/11 attacks, and passage of another AUMF for the invasion of Iraq in 2002.
Fallout from those votes deeply divided Congress and the nation, with many lawmakers, particularly Democrats, now saying they were mistakes. Yet Congress has been paralyzed on the question of whether to repeal or change those authorities.
The strikes by Iran had pushed Tehran and Washington perilously close to all-out conflict and put the world's attention on Trump as he weighed whether to respond with more military force.
Republicans have largely supported Trump's actions, saying the president was well within his power to take out Iran's architect of proxy operations against Americans in the Middle East. The U.S. considered Soleimani a terrorist.
Democrats were unconvinced that the threat posed by Soleimani was imminent or that other alternatives to the killing were pursued in good faith. By not disclosing many details of the threat, Trump was asking the American public to trust the very intelligence reports he has often disparaged, Democrats said.
Young told reporters Thursday that lawmakers "need to ensure that Congress is involved in future decision-making so we end up exactly where the president wants to end up, which is the avoidance of a major ground war in the Middle East.''
He called Kaine's resolution a "mechanism to force us to debate this.''
Three Republicans supported the measure: Reps. Matt Gaetz and Francis Rooney of Florida and Thomas Massie of Kentucky.
The eight Democrats who opposed it were Reps. Anthony Brindisi and Max Rose of New York, Joe Cunningham of South Carolina, Josh Gottheimer of New Jersey, Kendra Horn of Oklahoma, Ben McAdams of Utah and Stephanie Murphy of Florida.
Gaetz, one of Trump's strongest supporters, said "killing Soleimani was the right decision, but engaging in another forever war in the Middle East would be the wrong decision.''
Rose, an Army veteran who served in Afghanistan, said the resolution "simply restates existing law and sends the message that war is imminent. I refuse to play politics with questions of war and peace and therefore will not support this resolution."