Moodle 驗證架構參考¶
總說¶
Moodle 不走 Google OAuth,使用獨立帳號密碼驗證。
關鍵點:Google oauth2 token (token.json) 無法用於 Moodle 登入。兩個系統的認證完全獨立。
1. 認證方式¶
1.1 帳密認證(目前方案)¶
Moodle 帳密透過 .env 設定:
MOODLE_ACCOUNT=<你的_moodle_帳號>
MOODLE_PASSWORD=<你的_moodle_密碼>
使用場景: - 爬蟲 Moodle 課程首頁取得事件列表 - OIDC/Selenium 登入備備方案
1.2 OIDC 層進階方案(實驗中)¶
某些 Moodle 實例可能啟用 Shibboleth/SAML/OAuth 等企業級認證。目前 Time Compass 的爬蟲不支援,但架構預留。
相關細節可見: - Moodle 深度分析
2. 應用範圍¶
2.1 需要 Moodle 帳密的功能¶
- Moodle 事件爬蟲(
scrape_moodle_events()) - 課程資料聚合(
get_time_context中的 Moodle 區塊) - 課程列表展示
2.2 不需要 Moodle 帳密的功能¶
- Google Calendar/Tasks 讀寫(用 Google OAuth)
- Gemini AI 對話(用 GEMINI_API_KEY)
- 純本地 UI 功能
3. 設定與測試¶
3.1 設定步驟¶
- 取得你的 Moodle 帳號密碼(通常與校內系統同帳)
- 寫入
.env:MOODLE_ACCOUNT=student123 MOODLE_PASSWORD=your_secure_password - 重啟 MCP 伺服器或 IDE
3.2 驗證成功¶
呼叫 MCP 工具 get_moodle_events(),預期: - 回傳課程事件清單(非 401 Unauthorized) - 包含課程名稱、事件標題、截止時間
3.3 常見錯誤¶
| 症狀 | 原因 | 解法 |
|---|---|---|
401 Unauthorized | 帳號或密碼錯誤 | 確認 Moodle 登入頁面能手動登入 |
| 無法解析課程列表 | Moodle HTML 結構變更或特殊字元編碼 | 檢查 爬蟲邏輯 |
| 超時或斷線 | 網路延遲或 Moodle 伺服器繁忙 | 增加 timeout 或重試;見逾時設定 |
4. 安全考量¶
4.1 密碼管理¶
- 👉 必須:不可將
.env提交到 Git - 👉 建議:使用學校提供的臨時密碼或應用專用密碼(如有支援)
- 👉 建議:多使用者環境使用環境變數注入而非檔案存儲
4.2 與 Google OAuth 分開¶
Moodle 帳密與 Google token 是兩個完全獨立的認證系統:
| 系統 | 認證方式 | 存儲位置 | 用途 |
|---|---|---|---|
| OAuth 2.0 | token.json | Calendar、Tasks、Gemini API | |
| Moodle | 帳密 | .env | 課程事件爬蟲 |
不要混用、共享或假設兩者有相關。
5. 升級與替代方案¶
5.1 若 Moodle 支援 OAuth¶
部分現代 Moodle 實例可能啟用 OAuth provider。若貴校支援,價值: - 無需在 .env 儲存明文密碼 - 使用標準 OAuth flow(類似 Google) - 更符合現代安全實踐
實作成本:需改寫爬蟲與認證層。
5.2 若要使用官方 Moodle API¶
Moodle 提供 Web Services API,但需: - 明確的 API token(由管理員核發) - 伺服器啟用 Web Services(通常預設關閉) - REST 端點存取權限
相比爬蟲更穩定,但依賴校方 IT 支援。
相關文件¶
- Google OAuth 架構參考(完全不同的認證系統)
- Moodle 深度分析(實作細節、爬蟲邏輯、已知限制)