<?xml version="1.0" encoding="UTF-8"?>
<!-- Reviewed: no -->
<!-- EN-Revision: 24249 -->
<sect1 id="zend.gdata.clientlogin">
    <title>ClientLogin による認証</title>

    <para>
        ClientLogin を使用すると、<acronym>PHP</acronym> アプリケーションで
        Google Data サービスへのアクセスのための認証ができるようになります。
        ユーザの認証情報を、 <acronym>HTTP</acronym> クライアントに指定します。
    </para>

    <para>
        Google Data ClientLogin 認証についての詳細は、
        <ulink url="http://code.google.com/apis/accounts/AuthForInstalledApps.html"> http://code.google.com/apis/accounts/AuthForInstalledApps.html </ulink>
        を参照ください。
    </para>

    <para>
        Google のドキュメントでは、ClientLogin 方式は
        "インストールするアプリケーション" に適しており、一方 AuthSub は
        "ウェブアプリケーション" に適しているとされています。
        これらの違いは、AuthSub はユーザとのやりとりが発生するということです。
        ブラウザのインターフェイスを用いて、リクエストのリダイレクトを行います。
        ClientLogin では <acronym>PHP</acronym> のコードでアカウント情報を提供します。
        ユーザが直接認証情報を入力する必要がなくなります。
    </para>

    <para>
        ClientLogin で使用する認証情報は、Google サービスの正当な認証情報でなければなりません。
        しかし、それは <acronym>PHP</acronym> アプリケーションを使用するユーザ自身のものである必要はありません。
    </para>

    <sect2 id="zend.gdata.clientlogin.login">
        <title>ClientLogin 認証済みの Http クライアントの作成</title>

        <para>
            ClientLogin を使用した認証済みの <acronym>HTTP</acronym> クライアントを作成するには、
            静的関数 <methodname>Zend_Gdata_ClientLogin::getHttpClient()</methodname>
            をコールし、Google アカウントの認証情報をプレーンテキストで渡します。
            この関数の返り値は、<classname>Zend_Http_Client</classname> クラスのオブジェクトとなります。
        </para>

        <para>
            オプションの三番目のパラメータには、Google Data
            サービスの名前が指定できます。たとえば、'cl'
            は Google Calendar を表します。デフォルトは 'xapi' で、
            これは Google Data サーバの汎用的なサービス名を表します。
        </para>

        <para>
            オプションの四番目のパラメータには <classname>Zend_Http_Client</classname>
            のインスタンスを指定できます。これによって、
            たとえばプロキシサーバなどのクライアント設定を行うことができます。
            このパラメータに <constant>NULL</constant> を渡すと、
            汎用的な <classname>Zend_Http_Client</classname> オブジェクトが作成されます。
        </para>

        <para>
            オプションの五番目のパラメータには、Google Data
            サーバがクライアントアプリケーションを識別するための短い文字列
            (これはログ記録の際に使用します) を指定できます。
            デフォルトでは、これは "Zend-ZendFramework" となります。
        </para>

        <para>
          オプションの六番目のパラメータには、サーバが発行する
          <trademark>CAPTCHA</trademark> チャレンジ用の文字列 ID を設定します。
          これが必要となるのは、一度ログインを試みた際にサーバから
          <trademark>CAPTCHA</trademark> チャレンジを受け取った後の再ログイン時のみです。
        </para>

        <para>
          オプションの七番目のパラメータには、サーバが発行する
          <trademark>CAPTCHA</trademark> チャレンジに対するユーザからの応答を設定します。
          これが必要となるのは、一度ログインを試みた際にサーバから
          <trademark>CAPTCHA</trademark> チャレンジを受け取った後の再ログイン時のみです。
        </para>

        <para>
            以下の例は、<acronym>PHP</acronym> のウェブアプリケーションのコードです。
            Google Calendar サービスに対する認証を行い、
            認証済みの <classname>Zend_Http_Client</classname> を使用して <classname>Zend_Gdata</classname>
            クライアントオブジェクトを作成します。
        </para>

        <programlisting language="php"><![CDATA[
// Google アカウントの情報を指定します
$email = 'johndoe@gmail.com';
$passwd = 'xxxxxxxx';
try {
   $client = Zend_Gdata_ClientLogin::getHttpClient($email, $passwd, 'cl');
} catch (Zend_Gdata_App_CaptchaRequiredException $cre) {
    echo 'CAPTCHA 画像の URL: ' . $cre->getCaptchaUrl() . "\n";
    echo 'トークン ID: ' . $cre->getCaptchaToken() . "\n";
} catch (Zend_Gdata_App_AuthException $ae) {
   echo '認証に失敗: ' . $ae->exception() . "\n";
}

$cal = new Zend_Gdata_Calendar($client);
]]></programlisting>

    </sect2>

    <sect2 id="zend.gdata.clientlogin.terminating">
        <title>Http クライアントの ClientLogin 認証の解除</title>

        <para>
            ClientLogin 認証を解除する方法はありません。というのは、これは
            AuthSub のようにトークンを使用した認証ではないからです。
            ClientLogin 認証に使用する情報は Google アカウントのユーザ名とパスワードであり、
            これらは将来も繰り返し使用できます。
        </para>

    </sect2>

</sect1>
