81 lines
2.9 KiB
Markdown
81 lines
2.9 KiB
Markdown
# OAuth認証の修正案
|
||
|
||
## 現在の問題
|
||
|
||
1. **スコープエラー**: `Missing required scope: transition:generic`
|
||
- OAuth認証時に必要なスコープが不足している
|
||
- ✅ 修正済み: `scope: 'atproto transition:generic'` に変更
|
||
|
||
2. **401エラー**: PDSへの直接アクセス
|
||
- `https://shiitake.us-east.host.bsky.network/xrpc/app.bsky.actor.getProfile` で401エラー
|
||
- 原因: 個人のPDSに直接アクセスしているが、これは認証が必要
|
||
- 解決策: 公開APIエンドポイント(`https://public.api.bsky.app`)を使用すべき
|
||
|
||
3. **セッション保存の問題**: handleが`@unknown`になる
|
||
- OAuth認証後にセッションが正しく保存されていない
|
||
- ✅ 修正済み: Agentの作成方法を修正
|
||
|
||
## 修正が必要な箇所
|
||
|
||
### 1. avatarFetcher.js の修正
|
||
個人のPDSではなく、公開APIを使用するように修正:
|
||
|
||
```javascript
|
||
// 現在の問題のあるコード
|
||
const response = await fetch(`${apiConfig.bsky}/xrpc/app.bsky.actor.getProfile?actor=${did}`)
|
||
|
||
// 修正案
|
||
// PDSに関係なく、常に公開APIを使用
|
||
const response = await fetch(`https://public.api.bsky.app/xrpc/app.bsky.actor.getProfile?actor=${did}`)
|
||
```
|
||
|
||
### 2. セッション復元の改善
|
||
OAuth認証後のコールバック処理で、セッションが正しく復元されていない可能性がある。
|
||
|
||
```javascript
|
||
// restoreSession メソッドの改善
|
||
async restoreSession() {
|
||
// Try both clients
|
||
for (const [name, client] of Object.entries(this.clients)) {
|
||
if (!client) continue
|
||
|
||
const result = await client.init()
|
||
if (result?.session) {
|
||
// セッション処理を確実に行う
|
||
this.agent = new Agent(result.session)
|
||
const sessionInfo = await this.processSession(result.session)
|
||
|
||
// セッション情報をログに出力(デバッグ用)
|
||
logger.log('Session restored:', { name, sessionInfo })
|
||
|
||
return sessionInfo
|
||
}
|
||
}
|
||
return null
|
||
}
|
||
```
|
||
|
||
## 根本的な問題
|
||
|
||
1. **PDSアクセスの誤解**
|
||
- `app.bsky.actor.getProfile` は公開API(認証不要)
|
||
- 個人のPDSサーバーに直接アクセスする必要はない
|
||
- 常に `https://public.api.bsky.app` を使用すべき
|
||
|
||
2. **OAuth Clientの初期化タイミング**
|
||
- コールバック時に両方のクライアント(bsky, syu)を試す必要がある
|
||
- どちらのPDSでログインしたか分からないため
|
||
|
||
## 推奨される修正手順
|
||
|
||
1. **即座の修正**(401エラー解決)
|
||
- `avatarFetcher.js` で公開APIを使用
|
||
- `getProfile` 呼び出しをすべて公開APIに変更
|
||
|
||
2. **セッション管理の改善**
|
||
- OAuth認証後のセッション復元を確実に
|
||
- エラーハンドリングの強化
|
||
|
||
3. **デバッグ情報の追加**
|
||
- セッション復元時のログ追加
|
||
- どのOAuthクライアントが使用されたか確認 |