ソーシャルコネクターを開発するためのステップバイステップガイド
最も速く始める方法は、既存の公式コネクターのコードをコピーし、ニーズに合わせて修正することです。GitHub コネクターを例にとってみましょう。
ステップ 1: 既存のコネクターパッケージをクローンする
コネクターのソースフォルダーには、次のファイルがあります:
index.ts
: コネクターのメインエントリーファイル。constant.ts
: コネクターで使用される定数。types.ts
: コネクターで使用される TypeScript の型。index.test.ts
: コネクターのテストケース。mock.ts
: コネクターのテストケースで使用されるモックデータ。
これらのファイルに加えて、コネクターを説明する README.md
ファイル、logo.svg
(ダークモードでのユーザー体験を向上させるために logo-dark.svg
もオプションで)および npm パッケージ情報を定義する package.json
ファイルを提供する必要があります。
ステップ 2: メインエントリーファイル (index.ts) を修正する
index.ts
ファイルには、ほとんどのコネクターロジックが含まれています。通常、実装する必要がある 4 つの関数があります:
getAuthorizationUri
: サードパーティのソーシャルプラットフォームの認可 (Authorization) URI を生成します。GitHub の場合は次のようになります:https://github.com/login/oauth/authorize?client_id={clientId}&redirect_uri={redirectUri}&state={state}
。ターゲットのソーシャルプラットフォームの開発者ドキュメントを参照して、正しい URI を取得してください。authorizationCallbackHandler
: 認可 (Authorization) コールバック URI で返されたパラメーター値を保護し、認可 (Authorization)code
を抽出し、潜在的なエラーを処理します。getAccessToken
: 認可 (Authorization)code
をアクセス トークンに交換します。getUserInfo
: アクセス トークンを使用してサードパーティのソーシャルプラットフォームからユーザー情報を取得します。
他の一般的なロジックのほとんどは Logto コネクターキットで処理されているため、作業が容易になります。
最後に、ファイルの最後で、GitHub コネクターと同じコード構造に従ってコネクターオブジェクトをエクスポートするだけです。
const createGithubConnector: CreateConnector<SocialConnector> = async ({ getConfig }) => {
return {
metadata: defaultMetadata,
type: ConnectorType.Social,
configGuard: githubConfigGuard,
getAuthorizationUri: getAuthorizationUri(getConfig),
getUserInfo: getUserInfo(getConfig),
};
};
ステップ 3: コネクターをテストする
ユニットテスト
まず、いくつかのユニットテストケースを書き、基本的な機能が期待通りに動作することを確認します。
ローカルテスト
- ローカル環境で Logto をセットアップする:Logto はローカルで実行するためのいくつかの方法を提供しています。CLI を使用するか、docker を使用するか、ソースコードからビルドすることができます。詳細については、ドキュメントを確認してください 詳細はこちら。
- カスタムコネクターを Logto インスタンスにリンクする:CLI を使用して、コネクターのシンボリックリンクを Logto インスタンスに作成します。詳細はこちら。
cd logto
npx @logto/cli connector link -p . - コネクターをリンクした後、
<logto-root-path>/packages/core/connectors
フォルダーに表示されるはずです。 - Logto インスタンスを再起動し、Logto 管理コンソールに移動すると、ソーシャルコネクターのリストに表示されるはずです。
- Console > Sign-in experience > Sign-up and sign-in > ソーシャルサインインでコネクターを設定します。そして、「ライブプレビュー」機能を使用してデモアプリで試してみてください。