Skip to content

ptt 帳號認證機制 Email

Chuan-Heng Hsiao edited this page Apr 19, 2021 · 3 revisions

https://github.com/Ptt-official-app/go-pttbbs/issues/79

2021-04-19 update:

c-pttbbs 有新的 ptt 帳號認證機制

https://github.com/ptt/pttbbs/commit/5715b35f510f48eb5092d32882f1aa09181dc3a1

將 follow c-pttbbs 的新的 ptt 帳號認證機制.

Design

分成聯絡 email 和 認證 email: 聯絡 email:

  • 會檢查 unique email.
  • 會 update pttbbs 裡的 email 欄位.
  • n 天內 (n = 1) 最多只能換一次.

認證 email (idemail):

  • 會檢查 unique idemail.
  • 會多 ${BBSHOME}/${USERHOME}/.PASSWD2. UserLevel2 暫時放在這裡.
  • n 天內 (n = 100) 最多只能換一次.

TODO

  • 在 attempt-change-password / attempt-change-email / attempt-set-id-email 做 2FA.

Implementation

implementation 的 demo 可以在 https://www.devptt.site 裡看到~

聯絡 email:

  • attempt-change-email (進到更改聯絡信箱頁. 按下 submit 時所 call 的 function):
    • go-openmiddleware:
      1. 確認 unique email.
      2. 確認 client 是 ok 的. (不確定有沒有效.)
      3. 將 passwd / email / client-info 丟給 go-pttbbs. 讓 go-pttbbs 檢查 password 並且產生 token.
      4. 將 email / token 組成 url. 寄信給 user 確認.
    • go-pttbbs:
      1. 檢查是否是 ok 的 user.
      2. 檢查 password.
      3. 產生 token 並 return.
  • change-email (user 在 email 按 link 以後. 先回到 html. html 在 load 時直接 call change-email):
    • go-openmiddleware
      1. 跟 go-pttbbs 詢問 email-token 的 info (go-pttbbs 會在這層擋掉不 ok 的 user).
      2. 根據 email-token 的 info. 先在 db 嘗試 create 一個 not-set 的 data (擋掉 unique)
      3. 跟 go-pttbbs update email.
      4. 在 db 裡 update is-set.
    • go-pttbbs
      1. 確認 user 和 token 是相符的.
      2. 更改 pttbbs email.
      3. return.

認證 email:

  • attempt-set-id-email (進到更改認證信箱頁. 按下 submit 時所 call 的 function):
    • go-openmiddleware:
      1. 確認 unique email.
      2. 確認 client 是 ok 的. (不確定有沒有效.)
      3. 將 passwd / email / client-info 丟給 go-pttbbs. 讓 go-pttbbs 檢查 password 並且產生 token.
      4. 將 email / token 組成 url. 寄信給 user 確認.
    • go-pttbbs:
      1. 檢查是否是 ok 的 user.
      2. 檢查 password.
      3. 檢查是否是 ok 的認證 email.
      4. 產生 token 並 return.
  • set-id-email (user 在 email 按 link 以後. 先回到 html. html 在 load 時直接 call set-id-email):
    • go-openmiddleware
      1. 跟 go-pttbbs 詢問 email-token 的 info (go-pttbbs 會在這層擋掉不 ok 的 user).
      2. 根據 email-token 的 info. 先在 db 嘗試 create 一個 not-set 的 data (擋掉 unique)
      3. 跟 go-pttbbs update email.
      4. 在 db 裡 update is-set.
    • go-pttbbs
      1. 確認 user 和 token 是相符的.
      2. 在 ${BBSHOME}/${USERHOME}/.PASSWD2 設定 user-level2
      3. return.
Clone this wiki locally