Fix #4: Add login method