My initial guess is that since you aren't setting the Content-Type header in your request Flask doesn't understand that it should be able to parse the data. Try adding Content-Type header with the value application/json
and see if that gets you where you want.
Another thing to note is when I hit my login page the browser sets the Content-Type header to
application/x-www-form-urlencoded
and encodes the data as user=asdf&passwd=asdf