クッキー

公開または署名付きクッキーを通じて訪問者データをドキュメントに渡す

適応コンテンツの設定についてはガイドをご覧ください、 完全な手順 クッキーを使った適応コンテンツの設定方法。

訪問者のブラウザクッキーを介してドキュメントに訪問者データを渡すことができます。以下はさまざまな方法の概要です。

方法
ユースケース
設定の容易さ
セキュリティ
形式

署名付きクッキー gitbook-visitor-token

APIテストの資格情報、顧客識別

署名とカスタムドメインが必要

プロパティはバックエンドでのみ定義可能

JWT

公開クッキー gitbook-visitor-public

機能フラグ、役割

設定が簡単

訪問者がプロパティを上書き可能

JSON

公開クッキー

公開クッキーからGitBookにデータを渡すには、アプリケーションから公開 gitbook-visitor-public クッキーを設定してデータを送る必要があります。

以下は簡単なJavaScriptの例です:

import Cookies from 'js-cookie';

const cookieData = {
  isLoggedIn: true,
  isBetaUser: false,
};

Cookies.set('gitbook-visitor-public', JSON.stringify(cookieData), {
  secure: true,
  domain: '*.acme.org',
})

署名付きクッキー

より安全にGitBookへデータを渡すには、データを JSON Web Token としてアプリケーションからクッキーで送信する必要があります、名前は gitbook-visitor-token ドメインに紐づけられた。

これを設定するには、アプリケーションのログインフローを調整して次の手順を含める必要があります:

1

ユーザーがアプリにログインする際にJWTを生成する

ユーザーが製品にログインするたびに、認証されたユーザー情報の選択された属性を含むJWTを生成します。

2

サイトの訪問者署名キーでJWTに署名する

次に、サイトの 訪問者署名キーを使用してJWTに署名することを確認してください。これは適応コンテンツを有効にした後、サイトのオーディエンス設定で見つけることができます。

3

ワイルドカードのセッションクッキーにJWTを保存する

最後に、ユーザー情報を含む署名済みJWTをワイルドカードのセッションクッキーに保存する必要があります 製品ドメインの下に.

例えば、アプリケーションが次のの背後で配信されている場合、 app.acme.org ドメインの場合、そのクッキーは次の下で作成する必要があります、 .acme.org ワイルドカードドメイン。

以下は簡単なTypeScriptの例です:

import * as jose from 'jose';

import { Request, Response } from 'express';

import { getUserInfo } from '../services/user-info-service';
import { getFeatureFlags } from '../services/feature-flags-service';

const GITBOOK_VISITOR_SIGNING_KEY = process.env.GITBOOK_VISITOR_SIGNING_KEY;
const GITBOOK_VISITOR_COOKIE_NAME = 'gitbook-visitor-token';


export async function handleAppLoginRequest(req: Request, res: Response) {
   // ログインリクエストを処理するビジネスロジック
   // 例えば、資格情報の確認とユーザーの認証など
   //
   // 例:
   // const loggedInUser = await authenticateUser(req.body.username, req.body.password);

   // ユーザー認証後、データベースやユーザーサービスからGitBookに渡したいユーザー情報を取得します。
   // GitBookに渡すためのユーザー情報を構築します
   const userInfo = await getUserInfo(loggedInUser.id);
      
   // JWTのペイロードをユーザー情報で構築する
   const gitbookVisitorClaims = {
       firstName: userInfo.firstName,
       lastName: userInfo.lastName,
       isBetaUser: userInfo.isBetaUser
       products: userInfo.products.map((product) => product.name),
       featureFlags: await getFeatureFlags({userId: loggedInUser.id})
   }
   
   // クレームを使って署名済みJWTを生成します
   const gitbookVisitorJWT = await new jose.SignJWT(gitbookVisitorClaims)
     .setProtectedHeader({ alg: 'HS256' })
     .setIssuedAt()
     .setExpirationTime('2h') // 任意の2時間の有効期限
     .sign(GITBOOK_VISITOR_SIGNING_KEY);
     
  // エンコードされたJWTを含む`gitbook-visitor-token`クッキーをログインハンドラのレスポンスに含めます
  //
  res.cookie(GITBOOK_VISITOR_COOKIE_NAME, gitbookVisitorJWT, {
     httpOnly: true,
     secure: process.env.NODE_ENV === 'production',
     maxAge: 2 * 60 * 60 * 1000, // 任意の2時間の有効期限
     domain: '.acme.org' //
  });
  
  // リダイレクトなどを含む残りのログインハンドラのロジック
  res.redirect('/'); // 例のリダイレクト
}

最終更新

役に立ちましたか?