重構 login flow