- 追加された行はこの色です。
- 削除された行はこの色です。
* ログイン、ログアウト(もどき)機能の実装 [#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