The National Assembly, the French Parliament's lower house, approved the measure by a 317-199 vote.
The Senate must still approve the bill if it is to become a part of the French Constitution.
But the legislation has already split the ruling Socialist Party badly. Justice Minister Christiane Taubira resigned in opposition
to the measure.
"I am leaving the government over a major political disagreement," Taubira said. "I choose to be true to myself."
Overall, the legislation is intended to give the president greater powers to declare a state of emergency without, as is now the case, first asking for a vote in the Parliament.
A U.N. convention discourages countries from leaving people without any citizenship. France is a signatory to that convention.
The first draft of the measure called for stripping those with a second nationality who committed crimes against the nation to be stripped of their French citizenship. It caused outrage in some quarters, particularly on the left, on the grounds it would penalize those with second citizenships but not most of the French, who have only French passports.
The new measure still calls for stripping those with another nationality of their French citizenship. But it adds that those with French citizenship can be stripped of "the rights attached to it," implying that those with only one citizenship will face similar punishment to those with two or more.
The Senate is expected to vote on the bill March 22.
Any constitutional changes require both chambers of the Parliament to convene in a Congress in Versailles and proceed to a vote that receives a three-fifths majority. The Constitutional Council, France's highest court, must then review the text before the constitution can be amended.