2022-11-12|閱讀時間 ‧ 約 4 分鐘

APP誕生全紀錄 - 容易忽略的必要功能3:OAuth登入

一個APP在規劃的時候可能覺得主要功能就只有這一兩個,實作起來應該不難,卻忘了現代人的胃口已經越養越大,很多不在你預期內但對於使用者來說卻是很基本的功能;另一種是商店上架或是第三方要求的必要功能
如果你還沒有閱讀過「APP誕生全紀錄」,建議可以先看一下,至少知道哪些可能是容易忽略的必要功能,我們提過了推播APP跳轉,今天我們來探討第三種必要功能:OAuth登入。

什麼是OAuth?

OAuth 是開放授權的標準協定,允許使用者讓第三方應用存取該使用者在某一網站上儲存的私密的資源(如相片,影片,聯絡人列表),而無需將使用者名稱和密碼提供給第三方應用。
經由大型第三方已經認證過的帳號,所以我們可以直接相信和確保這個帳號的獨有性和擁有權,避免讓使用者重複跑繁複的Email或電話...等等的註冊流程,簡化使用者的操作,可以大幅提升你的APP友善程度。

登入流程架構

登入流程架構圖
  1. 使用者端發出驗證需求給指定的第三方
  2. 第三方提供認證介面
  3. 使用者輸入第三方驗證資料
  4. 驗證成功將提供token給使用者端並跳轉回原APP (這時候已經可以使用token取得一些相關的使用者資料)
  5. 將token傳給Firebase Authentication做紀錄認證
其實如果沒有使用Firebase Authentication也是可以執行到第4步驟後,直接由使用者端設備做處理,但第5步驟透過Firebase做登入處理可以方便許多,一者可以用來驗證是否有權限使用Firebase的其他服務,e.g. FireStore、FireStorage...etc,再來之後如果沒有登出,都會由使用者端和Firebase Auth之間來做自動連線認證和紀錄,對於開發者來說方便了許多,而且Authentication的服務目前是免費的。

實作測試

我們利用flutter + google_sign_in + firebase_auth實作Google登入看看吧!
// Trigger the authentication flow
final GoogleSignInAccount? googleUser = await _auth.signIn();
if (googleUser == null) return false;

// Obtain the auth details from the request
final GoogleSignInAuthentication googleAuth =
   await googleUser.authentication;

// Create a new credential
final credential = GoogleAuthProvider.credential(
  accessToken: googleAuth.accessToken,
  idToken: googleAuth.idToken,
);

//Firebase Auth
try{
 await FirebaseAuth.instance.signInWithCredential(credential);
} on FirebaseAuthException catch (e) {
  if (e.code == "account-exists-with-different-credential") {
   // Already have a different signin method
    return false;
  }
  return false;
}

總結

實作OAuth不會太過於困難,但卻是一個可以快速提升使用者體驗的驗證方式,不用猶豫了,快來為你的客戶們建立方便的使用者驗證吧!
分享至
成為作者繼續創作的動力吧!
© 2024 vocus All rights reserved.