シングルログアウト連携 (実装必須)

This page is not available in English.
Please select another language.

シングルログアウト連携」の実装は必須になります。

 

必須としている理由は、「シングルログアウト連携」が実装されていない場合、ユーザー A が Mobage 本体でゲームと関わりなくログアウトをして、別のユーザ B として Mobage にログインをした場合、『ゲームではユーザー A』、『Mobage 本体ではユーザー B』という混乱を招く状態ができあがってしまうためです。

概要

Mobage Connect 上でユーザーがゲームと関わりなくログアウトした際に、Game Server が シングルログアウト を行うための枠組みです。

Mobage Connect に Authorization Request を送るごとに、Authorization Response にて session_state 値が返されます。
この Authorization Response の session_state 値に変化があれば、Mobage Connect 上でユーザーがゲームと関わりなくログアウトしたと判断できます。
 
Mobage JavaScript SDK ではこの session_state パラメータを用いて、Mobage Connect 側のログイン状態が変更されたか確認することができます。
 
このログイン状態の変更の確認と、シングルログアウト連携 を行う機能を開発します。
 

作成するファイル一覧

このチュートリアルで作成するファイルは下記になります。

ファイル名

概要

config.php

各種設定値をまとめます

login_hybrid.php

シングルログアウト連携処理するJavaScriptを呼び出します

main.js

シングルログアウト連携処理を実施します

logout.php

Game Server で保持する Login Session を破棄します

 

チュートリアルをはじめる前に

このチュートリアルは、以下のチュートリアルを終わらせている前提で進めます。
以下のチュートリアルでファイル作成していない場合は、先にそちらを完成させましょう。

開発のステップ

シングルログアウト連携処理を実現するために、大きく以下の2ステップで進めます。

Mobage Connect ログインセッションの変更を監視する

Mobage JavaScript SDK を用いて、session_state パラメータが変更されていないか監視する処理を実装します。
 

セッションで保持しているsession_stateのHTMLへの埋め込み

Game Server でログインセッションに紐づけて保持している session_state を以下のようにHTML中に埋め込みます。

mobage-jssdk-sample-login/hybrid_flow/login_hybrid.php

 

19
20
21
<?php if(isset($_SESSION['session_state'])): ?>
    data-session-state="<?php echo $_SESSION['session_state'] ?>"
<?php endif; ?>

 

JavaScript で埋め込んだ session_state の読み込み

JavaScript の処理で HTML中に埋め込んだsession_stateパラメータを読み込みます。

mobage-jssdk-sample-login/main.js

 

25
26
27
28
29
30
31
32
var html = document.getElementsByTagName('html')[0];
 
clientData = {
    clientId     : html.dataset.clientId,
    redirectUri  : html.dataset.redirectUri,
    state        : html.dataset.state,
    sessionState : html.dataset.sessionState
};

 

session_state パラーメータの変更を監視

mobageReady イベントを待ち受けるイベントリスナー中で、mobage.event.subscribe() メソッドの oauth.sessionStateChange イベントを監視して、下記のように session_state の変化を待ち受けます。
このイベントのリスナーに関する result パラメータが changed の場合は、Mobage Connect のログインセッションが変更されているので、Game Server で保持している Login Session を破棄する必要があります。

mobage-jssdk-sample-login/main.js

 

25
26
27
28
29
30
31
32
33
if (clientData.sessionState) {
    mobageLogoutButton.style.cssText = 'visibility:visible';
    mobage.event.subscribe('oauth.sessionStateChange', clientData.sessionState, function(result) {
        if (result == 'changed') {
            location.href = '../others/logout.php';
        }
    });
    getMyInformation();
}

 

Game Server のログインセッションを破棄する

Mobage Connect でのログインセッション変更が確認できたら、 Game Server で保持している Login Session を破棄します。
Game Server にて Login Session を破棄したら、他のアカウントでログインする画面を表示するなど、ユーザーを次のアクションに繋げることを意識した設計としましょう。

開発したコード

このチュートリアルで開発したコードは Github から clone できます。

更新履歴

  • 2018/07/13
    • シングルログアウト連携」の実装を必須としました。
  • 2014/07/08
    • 新規作成

PREVIOUS

Mobage Connect からのログアウト

NEXT

Purchase Items