Implementing a one to one (1:1) relationship between Person and User
I have a person table. 


Fine (just changed the name of the PK column):

person
------
person_id    PK
firstname
lastname
email
telephone
...
...



  and a user table as a child. They must be 1:1 relationship, because an user cannot be repeated twice.


If the relationship is 1:1 (assuming that person is the supertpe and user is the subtype, you can handle this with having the same column both as Primary Key and Foreign Key to person:

user
----
person_id  PK  FK to person(person_id)
password
username
screenname
...
... 



  and so the email in the person row must not be repeated twice.


Add a UNIQUE constraint in the person.email column.


  Then I have this message table which stores messages from anyone,
  but you can see that firstname,lastname, email,telephone are duplicated in message table.
  so I am thinking to refer it to person table like this below.


Fine (adjusted to previous changes). But you also need to store who sends a message and who is the receiver:

message
-------
message_id   PK
sender_id    FK  to user(person_id)         --- or to person(person_id)
receiver_id  FK  to user(person_id)         --- that depends on your requirements
subject
content
...