前言
現在有規模的平台提供商基本上都會提供 Single Sign On (SSO)的登入機制,藉由他們的平台讓一般小網站可以讓使用者免密碼登入,雖然有很多種 Oauth2 的套件,不過我還是喜歡自己打 🤣,下面就開始嚕!
實作
在views/
建立一個line_login_auth.html
,填入以下內容,主要是實作一個按鈕並透過 javascript 來互叫 api 並導向到 LINE 頁面
1 | <html> |
接著我們在.env
加入 LINE Login 的環境變數並輸入對應的參數
1 | LINE_LOGIN_CLIENT_ID= |
最後就是我們最重要的部分了,實作 GET a& POST 的 api,這邊我先從 POST 講起,這邊主要是把環境變數組在網址中回傳給前端,這邊需要注意的是state
他是在回傳回來的 JWT 需要解碼時所使用的,這邊我簡單打個字串,然而實際上會隨機產個變數,確保解碼的安全。
GET 則是負責處理從 LINE 回來的參數們,這邊我只用回傳回來的state
把id_token
解開,拿到裡面的使用者的參數,後續可以參照應用把資訊存下來,放入 session 並告知前端已登入。
1 | from flask import request |
JWT 解開的參數如下,sub
就是 LINE 的唯一值 ID,一般拿到這個就可以知道是來自 LINE 的使用者了。
1 | { |
最後別忘了要在api.py
加入路由才會被導出去ㄛ
1 | from controller.line_login_controller import LineLoginController |
結論
在實作的時候不知道為什麼一直不能讓 python 去幫我把用戶導去 LINE 認證的頁面,我記得之前寫 Ruby 可以啊(?),最後只好讓前端去幫我把使用者導出去,這邊就帶大家做到這嚕!