more promise-style
ensure_user should return user