movabletype.jp
検索

連載その4「mt.js は何をしているのか? その1」

コミュニティ・ソリューションで利用される mt.js とは?

"mt.js" ファイルは、コミュニティー掲示板やコミュニティーブログで利用される多機能な JavaScript ファイルで、各掲示板やブログディレクトリの直下に配置されています。

コミュニティ・ソリューション以外でも "mt.js" を利用しますが、若干違う JavaScript ファイルとなっています。

主な利用場面は以下の4つです。

  • サインイン、サインアウト
  • コメント欄の表示、非表示
  • お気に入りの制御
  • 注目、被注目

今回は「サインイン、サインアウト」「コメント欄の表示、非表示」について取り上げます。

サインイン、サインアウトとは?

Movable Type(以下MT)アカウントとして登録済みのアカウントや、OpenIDを使って、コミュニティ・ソリューションにサインイン、サインアウトする機能です。

一旦サインインをすると Web ブラウザの Cookie 内にサインインセッション ID (mt_commenter, mt_blog_user) が保存され、他のコミュニティブログや掲示板、ブログなどでシングルサインオン(SSO)が利用できるようになります。このセッション ID の有効期限は3日と設定されています。変更する場合は "mt-config.cgi" に "CommentSessionTimeout" の値を秒単位で指定してください。

このセッション ID のうち "mt_commnter" は、MT の管理画面のサインイン時に同じ物が Cookie に保存されます。MT の管理画面にサインインしたままコミュニティ掲示板などで [サインイン] をクリックすると、管理画面にサインインしていたアカウントのままサインインしてしまいます。別のユーザーでサインインしたい場合は一旦 [サインアウト] をクリックするか、管理画面でサインアウトして改めて別のユーザーのアカウントでサインインしてください。

SSOを利用せずブログ毎にユーザーの詳細管理を行いたい場合は "mt-config.cgi" に "SingleCommunity 0" と記述します。この設定で登録時に登録対象以外のコミュニティ掲示板やブログに自動的にユーザー追加されなくなります。また、Cookie名が "mt_blog_user" から "mt_blogN_user"( NはブログID )に代わり、コミュニティ掲示板やブログ毎にユーザー情報が管理されるため、SSOが利用できなくなります。

サインイン、サインアウト 機能

サインイン、サインアウト 機能のほとんどはHTMLページ内に書き込まれた JavaScript によって動作しています。

  1. ページが表示された際にサインインセッション ID からサインインしているか確認します。
    • サインインしていない場合 [ サインイン | 登録 ] と表示します。
    • サインインしていて当該ブログにサインインする権限が無かった場合 [ このブログにサインインする権限はありません ] と表示します。
    • サインインしていてMTユーザーだった場合 [ サインイン | ユーザー情報の変更 | サインアウト ] と表示します。
    • サインインしていてMTユーザーでなかった場合( OpenID など) [ サインイン | サインアウト ] と表示します。
  2. [ サインイン ] がクリックされた場合、ユーザーの権限を確認します。
    • ユーザー情報を取得します。
    • [ サインインします ] と表示し、インジケーターが表示されます。
    • サインインセッション ID が無い場合や情報に誤りがあった場合、サインイン画面にリダイレクトされます。
    • サインイン状態にあることがわかった場合、上述の「ページが表示された際に...」と同様の動作をします。
  3. [ サインアウト ] がクリックされた場合、サインアウト処理を行います。
    • サインアウト処理を実行し、サインインセッション ID の内容を消去します。Cookie の値を空にします。
    • サインアウト処理を行い、完了後サインアウト処理の前に閲覧していたページにリダイレクトします。

コメント欄の表示、非表示とは?

コメント欄は初期状態で非表示となっており、サインインを行うと表示されコメントが出来るようになります。

コメント欄の表示に利用するサインインセッション ID は、Cookie に保存され SSO が可能です。この サインインセッション ID はコミュニティ掲示板やブログのサインイン、サインアウトの説明で出た物と同じ物です。

メニューの [設定][登録/認証] で「認証なしユーザーまたは匿名ユーザーからコメントを受け付ける」にチェックが入っている場合、コメント投稿をするのにサインインしなくてもコメントが可能になります。

「認証なしユーザーまたは匿名ユーザー」からのコメントはコミュニティ掲示板では不要であることが多いため、コメントを許可しない(チェックを外す:デフォルト)ように設定します。

上述の通りに設定を行うとMTにプロフィールを持っているユーザー(OpenIDを許可している場合はそのユーザーも)は、サインインするとコメントが可能になります。

コメント欄の表示、非表示 機能

コメントの表示、非表示は mt.js により制御されています。

  1. ページが読み込まれると、ユーザーのステータスを調べます。
    • サインインセッション ID を調べ、サインイン状態かどうかを確認します。
    • サインインしていない場合、コメント欄を非表示にします。
    • サインインしている場合、コメント欄を表示します。
  2. サインインしていない状態で、 [サインイン] をクリックした場合
    • サインイン画面が表示されます。
    • サインインが成功すると元の画面に戻ります。
    • コメント欄が表示されています
  3. サインインしている状態で、 [サインイン] をクリックした場合
    • コメント欄が表示されます。
  4. コメント欄上のテキストの変化
    • サインインしていない場合:「コメントするにはまずサインインしてください。」
    • サインインしたがコメント権限が無い場合:「コメントする権限がありません」
    • サインインが成功した場合:「○○としてサインインしています。(サインアウト)」
    • 匿名コメントを許している場合:「コメントする前にサインインすることもできます。」