Its correct to have two entities one for Infrastructure i.e User class that is mapped to the database and another User entity At domain layer which contains the value objects? Or is a correct approach to map directly to the database the domain entity?
It can be correct. If you want to keep database-specific concepts separate from domain concepts, you might have a DTO that you populate with the results from a database query that is subsequently mapped to a domain type. This mapping process will convert database-specific concepts into those only known by the domain.
However, there's no reason that the results of a database query cannot be mapped directly onto a domain type, if they're compatible. A simple class with just primitive types, for example.