* ログイン、ログアウト(もどき)機能の実装 [#sc114508] - ページ: [[BugTrack2]] - 投稿者: [[ぃぉぃぉ]] - 優先順位: 低 - 状態: 却下 - カテゴリー: 本体新機能 - 投稿日: 2007-04-20 (金) 23:22:26 - バージョン: ** メッセージ [#q00a40aa] [[official:質問箱3/608]]を検討しているときに思いついたのでログイン、ログアウトの機能を実装してみました。 BASIC認証に、ログアウトの仕様はありませんが、存在しないユーザー名でアクセスすることでログアウトっぽく動作してくれると期待。そのときの動作はブラウザによるらしいですが、とりあえずIE6とFirefox(Ver2.0.0.3)で動作確認しました。 #contents **仕様 [#f29a79ae] ***login [#r5d584c8] -login専用ページに対して、readauthを全メンバーからかける。 -内容はログインユーザーの表示とログアウトリンク。 ***logout [#vf118503] -http://logout:nopass@サーバー名/ログアウトページ へのリンク。 ***表示 [#mdd2b33a] -NaviBarにログインユーザーとログアウトリンク -タイトルにログインユーザーの表示 **デモ [#b003c0f6] [[こちらでやってます。>http://ioio.is.land.to/PukiWiki/index.php?Guest]] **実装 [#vc63b689] ***pukiwiki.ini.php [#t927fae6] -ログアウト用のユーザー名設定。 &br;L.23あたりに追加。 ///////////////////////////////////////////////// // Security settings +++ // PKWK_LOGOUT_USER +++ // User name to be used to implement logout function to the basic authorizing. +++ // basic認証にログアウトもどき機能を実装する為の、ログアウトに使用するユーザー名 +++ define('PKWK_LOGOUT_USER', 'logout'); // user logout can't be userd -ログイン用ページ、ログアウト用ページの設定。 &br;L.134あたりに追加。 // Default page name $defaultpage = 'FrontPage'; // Top / Default page $whatsnew = 'RecentChanges'; // Modified page list $whatsdeleted = 'RecentDeleted'; // Removeed page list $interwiki = 'InterWikiName'; // Set InterWiki definition here $menubar = 'MenuBar'; // Menu +++ $loginpage = 'login'; // User Login Page +++ $logoutpage = 'logout'; // User logout Page ***ja.lng.php [#adbc74f5] $_LANG設定部分に追加。 +++ $_LANG['skin']['login'] = 'ログイン'; // ログイン +++ $_LANG['skin']['logout'] = 'ログアウト'; // ログアウト ***en.lng.php [#f8d483a4] $_LANG設定部分に追加。 +++ $_LANG['skin']['login'] = 'login'; // login +++ $_LANG['skin']['logout'] = 'logout'; // logout ***skin/pukiwiki.skin.php [#n264e880] -read_authのglobal宣言。 &br;L.36あたりに追加。 // ------------------------------------------------------------ // Code start +++ global $read_auth; -titleにユーザー名表示と、ユーザー名取得関数追加。 &br;L.76部分を置き換え。 --- <title><?php echo $title ?> - <?php echo $page_title ?></title> +++ <?php +++ function _check_user(){ +++ if (isset($_SERVER['PHP_AUTH_USER'])) +++ { +++ if ($_SERVER['PHP_AUTH_USER'] != logout) +++ { +++ return TRUE; +++ } +++ } +++ return FALSE; +++ } +++ function _show_user($message){ +++ if (_check_user()) +++ { +++ echo 'User ' . $_SERVER['PHP_AUTH_USER']; +++ return TRUE; +++ } +++ return FALSE; +++ } +++ ?> +++ <title><?php if(_show_user()) { echo ' - ';} ?><?php echo $title ?> - <?php echo $page_title ?></title> -<div id="navigator">部分に追加。navibarにログイン、ログアウトを追加。 &br;L.165辺り。 <?php } ?> +++ <?php if ($read_auth) { ?> +++ [ +++ <?php if (_show_user()) { ?> +++ | +++ <?php _navigator('logout') ?> +++ <?php } else { ?> +++ <?php _navigator('login') ?> +++ <?php } ?> +++ ] +++ <?php } ?> <?php } // PKWK_SKIN_SHOW_NAVBAR ?> </div> ***lib/html.php [#w012a6d8] -function catbody() --pukiwiki.ini.phpで設定したログイン、ログアウトページ名をglobal宣言。 &br;L.20辺りに追加。 global $_LANG, $_LINK, $_IMAGE; +++ global $loginpage, $logoutpage; --navibarで飛ぶ先の設定。 &br;L.66辺りに追加。 $_LINK['upload'] = "$script?plugin=attach&pcmd=upload&page=$r_page"; +++ $_LINK['login'] = "$script?" . rawurlencode($loginpage); +++ $_LINK['logout'] = preg_replace('#://#', '://' . PKWK_LOGOUT_USER . ':nopass@', $script) . "?" . rawurlencode($logoutpage); ***rules.ini.php [#jb91d3d9] ログインページ用にルール追加。 $datetime_rules = array( +++ '&_authuser;' => $_SERVER['PHP_AUTH_USER'], **設定例 [#hf3bdb68] ***pukiwiki.php.iniのauthの設定。 [#n0e78d58] -auth設定例 ///////////////////////////////////////////////// // User definition $auth_users = array( // Username => password 'guest' => 'guest', 'guest1' => 'guest1', 'guest2' => 'guest2', ); ///////////////////////////////////////////////// // Authentication method $auth_method_type = 'pagename'; // By Page name //$auth_method_type = 'contents'; // By Page contents ///////////////////////////////////////////////// // Read auth (0:Disable, 1:Enable) $read_auth = 1; //これが1の場合にログイン、ログアウト機能が有効。 $read_auth_pages = array( // Regex Username '#^login$#' => 'guest,guest1,guest2', //全ユーザ名を記載すること。 '#^Guest\/.*#' => 'guest,guest1,guest2', ); ***ログインページ [#sb804a03] &_authuser;さん、PukiWikiへようこそ。 ***ログアウトページ [#f9f28451] ログアウトしました。 -------- **コメント [#p5bd8d59] - あとは、[[official:質問箱4/45]]で自分が提示した案を、各プラグインに実装していきたいな、と。 -- [[ぃぉぃぉ]] &new{2007-04-20 (金) 23:55:26}; - Basic認証がかかっている状態を強制的に外そう、というのは面白いアイデアですね。 -- [[henoheno]] &new{2007-04-24 (火) 00:04:57}; - 別のユーザー名を使うというのはなかなかいいアイデアですね。目から鱗。 -- [[Ilfa]] &new{2007-05-09 (水) 13:50:27}; - 動作報告です。-- [[g@kko]] &new{2007-05-09 (水) 20:33:17}; --Orepa 9.20 初回,ログアウト時にセキュリティ警告が出ました。([[ScreenShot>http://gasakura.net/wiki/index.php?plugin=attach&pcmd=open&file=WS000002.JPG&refer=img]]) ~ guest1で認証 => ログアウト => 認証ダイアログなしに,Guest/test1を閲覧可能(ブラウザを閉じれば再度,認証ダイアログが表示されます。 ) --IE 7.0.5730.11 ログアウトのアンカーをクリックしても無反応です。 ---=>[[MS04-004>http://www.microsoft.com/japan/technet/security/bulletin/MS04-004.mspx]]の影響のようです。詳細は「[[IEで HTTP(S) URLのユーザー情報を処理する際のデフォルトの動作>http://support.microsoft.com/kb/834489]]」にて。 --IE 6.0.2900.2180.xpsp_sp2_gdr.070227-2254 ログアウトのアンカーをクリックすると,「無効な構文エラー」を表示。原因は同上です。 -- 動作確認、報告お疲れ様です。ありがとうございます。&br;この書式は使えなくなってきそうですねぇ orz -- [[ぃぉぃぉ]] &new{2007-05-10 (木) 12:26:08}; - REMOTE_USERを取得できない[[場合があった>http://ioio.is.land.to/PukiWiki/index.php?Guest]]ので、PHP_AUTH_USERに変更。 -- [[ぃぉぃぉ]] &new{2007-06-02 (土) 20:01:43}; - esLaqFsmPLUkJZv -- [[upvvubtmx]] &new{2015-07-03 (金) 11:10:15}; #comment //#comment