Why not just create a User model that has a null username and password field? If they sign up, you fill in those attributes. No need for a second table!
You could model this in other ways on the User model too, like having a registered_at column, which, when blank, means an unregistered user. (In case, for example, you wanted to autogenerate a username for anonymous users, for display purposes.)