But the Flask-Login documentation says it takes in a user object as a parameter and all of the implementations I've found online use the method in this manner so I can't understand where my error lies.

Your error derives from a name conflict. The Flask login_user is being shadowed by your view which shares the same name. Python rightly assumes you're trying to make a recursive call albeit with a wrong signature. Rename your view function login_user to something else.