* ログイン、ログアウト(もどき)機能の実装 [#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) { ?> &nbsp;
 +++	[
 +++	  <?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&amp;pcmd=upload&amp;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(
 +++		'&amp;_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&#x3a;//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&#x3a;//www.microsoft.com/japan/technet/security/bulletin/MS04-004.mspx]]の影響のようです。詳細は「[[IEで HTTP(S) URLのユーザー情報を処理する際のデフォルトの動作>http&#x3a;//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&#x3a;//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

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Site admin: PukiWiki Development Team

PukiWiki 1.5.4+ © 2001-2022 PukiWiki Development Team. Powered by PHP 8.2.12. HTML convert time: 0.318 sec.

SourceForge