The function user returns the current user, in your case the user changing the table.

With this trigger the table is mutating, the table is affected by the triggering event. The trigger updates the table audit_changes on update of the table audit_changes.

Why do you first insert and then update the table? Now you only see the last changes made.

I think tamilselvan has given the the trigger you need.