ログイン、ログアウト(もどき)機能の実装

  • ページ: BugTrack2
  • 投稿者: ぃぉぃぉ
  • 優先順位: 低
  • 状態: 却下
  • カテゴリー: 本体新機能
  • 投稿日: 2007-04-20 (金) 23:22:26
  • バージョン:

メッセージ

official:質問箱3/608を検討しているときに思いついたのでログイン、ログアウトの機能を実装してみました。

BASIC認証に、ログアウトの仕様はありませんが、存在しないユーザー名でアクセスすることでログアウトっぽく動作してくれると期待。そのときの動作はブラウザによるらしいですが、とりあえずIE6とFirefox(Ver2.0.0.3)で動作確認しました。

仕様

login

  • login専用ページに対して、readauthを全メンバーからかける。
  • 内容はログインユーザーの表示とログアウトリンク。

logout

  • http://logout:nopass@サーバー名/ログアウトページ へのリンク。

表示

  • NaviBarにログインユーザーとログアウトリンク
  • タイトルにログインユーザーの表示

デモ

[[こちらでやってます。>http://ioio.is.land.to/PukiWiki/index.php?Guest]]

実装

pukiwiki.ini.php

  • ログアウト用のユーザー名設定。
    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
  • ログイン用ページ、ログアウト用ページの設定。
    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

$_LANG設定部分に追加。

+++	$_LANG['skin']['login']     = 'ログイン';	// ログイン
+++	$_LANG['skin']['logout']    = 'ログアウト';	// ログアウト

en.lng.php

$_LANG設定部分に追加。

+++	$_LANG['skin']['login']     = 'login';	// login
+++	$_LANG['skin']['logout']    = 'logout';	// logout

skin/pukiwiki.skin.php

  • read_authのglobal宣言。
    L.36あたりに追加。
    	// ------------------------------------------------------------
    	// Code start
    +++	global $read_auth;
  • titleにユーザー名表示と、ユーザー名取得関数追加。
    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にログイン、ログアウトを追加。
    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

  • function catbody()
    • pukiwiki.ini.phpで設定したログイン、ログアウトページ名をglobal宣言。
      L.20辺りに追加。
      	global $_LANG, $_LINK, $_IMAGE;
      +++	global $loginpage, $logoutpage;
  • navibarで飛ぶ先の設定。
    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

ログインページ用にルール追加。

	$datetime_rules = array(
+++		'&amp;_authuser;'	=> $_SERVER['PHP_AUTH_USER'],

設定例

pukiwiki.php.iniのauthの設定。

  • 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',
    );

ログインページ

&_authuser;さん、PukiWikiへようこそ。

ログアウトページ

ログアウトしました。

コメント

  • あとは、official:質問箱4/45で自分が提示した案を、各プラグインに実装していきたいな、と。 -- ぃぉぃぉ 2007-04-20 (金) 23:55:26
  • Basic認証がかかっている状態を強制的に外そう、というのは面白いアイデアですね。 -- henoheno 2007-04-24 (火) 00:04:57
  • 別のユーザー名を使うというのはなかなかいいアイデアですね。目から鱗。 -- Ilfa 2007-05-09 (水) 13:50:27
  • 動作報告です。-- g@kko 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 ログアウトのアンカーをクリックすると,「無効な構文エラー」を表示。原因は同上です。
    • 動作確認、報告お疲れ様です。ありがとうございます。
      この書式は使えなくなってきそうですねぇ orz -- ぃぉぃぉ 2007-05-10 (木) 12:26:08
  • REMOTE_USERを取得できない[[場合があった>http://ioio.is.land.to/PukiWiki/index.php?Guest]]ので、PHP_AUTH_USERに変更。 -- ぃぉぃぉ 2007-06-02 (土) 20:01:43

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2015-07-04 (土) 02:21:56
Site admin: PukiWiki Development Team

PukiWiki 1.5.2+ © 2001-2019 PukiWiki Development Team. Powered by PHP 5.6.40-0+deb8u7. HTML convert time: 0.254 sec.

OSDN