Implement User Provider && Code refactor