透過OAuth以使用他站帳號登入網站,實作中遇到的問題

其實在建立連線、取得Token及資料這一段,已經有許多文章及Framework可以使用,所以我並沒在這邊遇到很多問題。

真正讓我煩惱的是,因為我的網站中會員的email必須唯一,所以當一個使用者透過外部帳號登入時,會遇到幾個現象:

  1. email在會員資料庫中沒有找到
    1. 使用者不曾在本站註冊過,就自動建立一個會員對應之,在OAuth與本站帳號的關聯資料表中也建立彼此的對應資料行。
    2. 使用者曾在本站以其他Email註冊過
      • 同1.1,建立新帳號以對應。                              <== 目前的做法
      • 詢問使用者是否有註冊過                                   <== 感覺這個比較好
        1. 有:輸入帳號密碼,然後建立兩者的對應。
        2. 沒有:同1.1。
  2. email在會員資料庫中已存在 => 這邊有兩個情況,
    1. 使用者之前有註冊過,目前的解決方式是要求使用者輸入該帳號的密碼,如果通過就在OAuth與本站帳號的關聯資料表中也建立彼此的對應資料行。
    2. 使用者之前有透過別的外部帳號登入:我目前想到的有
      • 透過忘記密碼功能,重設該本站帳號的密碼。 ==> 好像太繁瑣了?
      • 提示使用者該帳號是透過其他服務登入的,並要求使用者使用該登入方式。 ==> 感覺怪怪的?

不知道有沒有更好的方式啊…? 囧


9/13 Update:

想了一想,上面的邏輯不是很好,決定改成以下方式:

  • 先用OAuth ID檢查關聯資料表中是否已有資料:
    • 有 ==> 以對應的本站會員身分自動登入。
    • 沒有,改用Email查詢本站是否已有會員使用:
      • 有,看此帳號是否是自動產生:
        • 是 ==> 顯示訊息,告知此帳號是由別的網站登入後自動建立的,請使用者改用該網站登入。
        • 否 ==> 顯示該帳號告知使用者,並要求使用者輸入該本站帳號的密碼以確認關聯。
      • 沒有 ==> 自動建立本站帳號以對應之,並自動登入後導回原頁面。
廣告

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com 標誌

您的留言將使用 WordPress.com 帳號。 登出 /  變更 )

Google+ photo

您的留言將使用 Google+ 帳號。 登出 /  變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 /  變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 /  變更 )

w

連結到 %s