cesko-digital / app

Komunitní aplikace Česko.Digital

Home Page:https://app.cesko.digital

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Přihlašování do aplikace pomocí e-mailu

zoul opened this issue · comments

Aktuálně funguje přihlašování přes Slack (OAuth). Chceme přejít na přihlašování mailem, viz Miro. Uživatel zadá svůj mail, my mu pošleme přihlašovací odkaz, kliknutím na něj se vrátí na web už přihlášený. Pokud e-mail nepatří žádnému známému účtu, nabídneme uživateli možnost registrace.

Implementační poznámky:

  • Využijeme opět knihovnu NextAuth.js, konkrétně poskytovatele Email, dokumentace tady.
  • V databázi máme k uživatelům víc mailových adres, zejména registrační adresu (User Profiles / email) a – potenciálně odlišnou – registrační adresu do Slacku (Slack Users / email).
  • Registrační adresu momentálně přímo neověřujeme. Pokud se shoduje s registrační adresou do Slacku, ověří ji za nás Slack. Pokud ne, ověřuje identitu uživatele v podstatě ruční zásah editora, který ho páruje s novým uživatelem ve Slacku. Abychom předešli problémům, bylo by dobré uvažovat adresu z tabulky User Profiles pouze u lidí, kteří mají spárovaný účet ze Slacku. V rámci #982 se tenhle problém zjednoduší, protože začneme ověřovat i tu registrační adresu.
  • Pokud to nebude nepraktické, vezměme s tímhle ticketem rovnou i #981, tedy aktualizujme UI u přihlašování Slackem, ať zůstane ve hře.
  • Šlo by to udělat tak, aby fungovalo přihlášení například i pro náhledy vývojových větví nebo lokální vývoj? To by bylo super, OAuth přes Slack teď takhle funguje jen s obtížemi.
  • Pokud e-mail neznáme, nebudeme automaticky zakládat nový účet, ale nabídneme uživateli možnost registrace. Chceme tady především dát šanci uživatelům, kteří si nebudou pamatovat, pod kterým e-mailem u nás mají účet.
  • Bude potřeba nadesignovat e-mail pro přihlášení.

Jedna nepříjemnost je, že ten e-mail provider z NextAuth.js už vyžaduje databázi – a vypadá to, že nejen pro nějaké jednoduché uložení tokenů, ale pro celé vedení uživatelské databáze. Což by znamenalo, že bychom to museli nějak napasovat na naše aktuální schéma. Přemýšlím, jestli to neimplementovat bez databáze, viz nextauthjs/next-auth#1913.