тл;др:
1. пароли не нужны
2. сделай кнопку "send me a link by email"
3. положи статический секрет на сервер. Лучше всего генери его случайно на время жизни сервера, и держи в памяти, если это один инстанс и он не ребутится каждые 5 минут.
4. возьми merlin Transcript чтоб посчитать мак с таймаутом, user_id и секретом.
5. пришли ссылку с мак-кодом, user_id и таймаутом.
6. при входе - проверь что exp_time > now
7. сосчитай мак на сервере и сравни с полученным.
8. положи куки