implementing user provider