finished User model with authentication