Tank Authの基本設定

今日は、前回導入した認証用ライブラリTank Authの基本設定を変更してみたいと思います。『application/config』フォルダの『tank_auth.php』を開きます。10行目と11行目を見てみます。

$config[‘website_name’] = ‘Your project’;
$config[‘webmaster_email’] = ‘webmaster@your-site.com’;

これは、認証ライブラリから送信されたEmail用の設定です。試しに『Your project』を『WinRoad徒然草』、『webmaster@your-site.com』を自分のメールアドレスに変更して、ユーザー登録をしてみます。

下記のようなアクティベート用メールが送信されてきました。

表題がちょっとおかしいですし、英語ですので、変更したいと思います。『application/language/japanese』フォルダの『tank_atuh_lang.php』ファイルを開き、33行目

$lang[‘auth_subject_activate’] = ‘ようこそ %s さん!’;

の『ようこそ%sさん』を『ようこそ%s へ』に変更します。

次に、『application/views/email』フォルダの『activate-html.php』ファイルを下記のように変更します。

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head><title>Welcome to <?php echo $site_name; ?>!</title></head>
<body>
<div style="max-width: 800px; margin: 0; padding: 30px 0;">
<table width="80%" border="0" cellpadding="0" cellspacing="0">
<tr>
<td width="5%"></td>
<td align="left" width="95%" style="font: 13px/18px Arial, Helvetica, sans-serif;">
<h2 style="font: normal 20px/23px Arial, Helvetica, sans-serif; margin: 0; padding: 0 0 18px; color: black;">ようこそ <?php echo $site_name; ?>へ</h2>
<?php echo $site_name; ?>への新規登録ありがとうございます。 登録が安全に行われるようにアクティベートをお願いします。<br />
アクティベートするには、下記のリンクをクリックして下さい。<br />
<br />
<big style="font: 16px/18px Arial, Helvetica, sans-serif;"><b><a href="<?php echo site_url('/auth/activate/'.$user_id.'/'.$new_email_key); ?>" style="color: #3366cc;">登録完了(アクティベート)</a></b></big><br />
<br />
リンクが動作しない場合は、下記のリンクをアドレスバーにコピーして下さい。<br />
<nobr><a href="<?php echo site_url('/auth/activate/'.$user_id.'/'.$new_email_key); ?>" style="color: #3366cc;"><?php echo site_url('/auth/activate/'.$user_id.'/'.$new_email_key); ?></a></nobr><br />
<br /><?php echo $activation_period; ?> 時間以内に、アクティベートを完了させて下さい。そうでなければ、登録は無効になり、再登録する必要があります。<br />
<br />
<br />
<?php if (strlen($username) > 0) { ?>あなたのお名前: <?php echo $username; ?><br />
<?php } ?>あなたのEメールアドレス: <?php echo $email; ?><br />
<?php if (isset($password)) { /* ?>Your password: <?php echo $password; ?><br /><?php */ } ?>
<br />
<br />
楽しい時を過ごして下さい!<br /><?php echo $site_name; ?> チーム</td>
</tr>
</table>
</div>
</body>
</html>

次に、スパム登録防止用のcapthca画像がデフォルトでは、ものすごく見づらい(大文字と小文字の判別がつきにくい、数字なのかアルファベットなのか判別しづらい)ですので、変更します。
『application/config』フォルダの『tank_auth.php』ファイルを開き、113行目

$config[‘captcha_fonts_path’] = ‘captcha/fonts/5.ttf’;

の最後を『4.ttf;』に変更します。これは各自の好みで変更して下さい。私はこれが一番読みやすかったです(読みやすい文字がスパム防止になるかどうかはわかりませんが、登録時のいらいらからは解消されました)。

それでは、ブラウザで確認してみます。アクティベート用のメールが下記のように変更になりました。

次に、『application/views/auth』フォルダの『login_form.php』ファイルを日本語にします。

<?php
$login = array(
	'name'	=> 'login',
	'id'	=> 'login',
	'value' => set_value('login'),
	'maxlength'	=> 80,
	'size'	=> 30,
);
if ($login_by_username AND $login_by_email) {
	$login_label = 'ログイン名又はEmail';
} else if ($login_by_username) {
	$login_label = 'ログイン名';
} else {
	$login_label = 'Email';
}
$password = array(
	'name'	=> 'password',
	'id'	=> 'password',
	'size'	=> 30,
);
$remember = array(
	'name'	=> 'remember',
	'id'	=> 'remember',
	'value'	=> 1,
	'checked'	=> set_value('remember'),
	'style' => 'margin:0;padding:0',
);
$captcha = array(
	'name'	=> 'captcha',
	'id'	=> 'captcha',
	'maxlength'	=> 8,
);
?>
<?php echo form_open($this->uri->uri_string()); ?>
<table>
	<tr>
		<td><?php echo form_label($login_label, $login['id']); ?></td>
		<td><?php echo form_input($login); ?></td>
		<td style="color: red;"><?php echo form_error($login['name']); ?><?php echo isset($errors[$login['name']])?$errors[$login['name']]:''; ?></td>
	</tr>
	<tr>
		<td><?php echo form_label('パスワード', $password['id']); ?></td>
		<td><?php echo form_password($password); ?></td>
		<td style="color: red;"><?php echo form_error($password['name']); ?><?php echo isset($errors[$password['name']])?$errors[$password['name']]:''; ?></td>
	</tr>

	<?php if ($show_captcha) {
		if ($use_recaptcha) { ?>
	<tr>
		<td colspan="2">
			<div id="recaptcha_image"></div>
		</td>
		<td>
			<a href="javascript:Recaptcha.reload()">Get another CAPTCHA</a>
			<div class="recaptcha_only_if_image"><a href="javascript:Recaptcha.switch_type('audio')">Get an audio CAPTCHA</a></div>
			<div class="recaptcha_only_if_audio"><a href="javascript:Recaptcha.switch_type('image')">Get an image CAPTCHA</a></div>
		</td>
	</tr>
	<tr>
		<td>
			<div class="recaptcha_only_if_image">Enter the words above</div>
			<div class="recaptcha_only_if_audio">Enter the numbers you hear</div>
		</td>
		<td><input type="text" id="recaptcha_response_field" name="recaptcha_response_field" /></td>
		<td style="color: red;"><?php echo form_error('recaptcha_response_field'); ?></td>
		<?php echo $recaptcha_html; ?>
	</tr>
	<?php } else { ?>
	<tr>
		<td colspan="3">
			<p>Enter the code exactly as it appears:</p>
			<?php echo $captcha_html; ?>
		</td>
	</tr>
	<tr>
		<td><?php echo form_label('Confirmation Code', $captcha['id']); ?></td>
		<td><?php echo form_input($captcha); ?></td>
		<td style="color: red;"><?php echo form_error($captcha['name']); ?></td>
	</tr>
	<?php }
	} ?>

	<tr>
		<td colspan="3">
			<?php echo form_checkbox($remember); ?>
			<?php echo form_label('ログインの記憶', $remember['id']); ?>
			<?php echo anchor('/auth/forgot_password/', 'パスワードの紛失'); ?>
			<?php if ($this->config->item('allow_registration', 'tank_auth')) echo anchor('/auth/register/', '新規登録'); ?>
		</td>
	</tr>
</table>
<?php echo form_submit('submit', 'ログイン'); ?>
<?php echo form_close(); ?>

同じフォルダ内の『register_form.php』ファイルを下記のように変更します。

<?php
if ($use_username) {
	$username = array(
		'name'	=> 'username',
		'id'	=> 'username',
		'value' => set_value('username'),
		'maxlength'	=> $this->config->item('username_max_length', 'tank_auth'),
		'size'	=> 30,
	);
}
$email = array(
	'name'	=> 'email',
	'id'	=> 'email',
	'value'	=> set_value('email'),
	'maxlength'	=> 80,
	'size'	=> 30,
);
$password = array(
	'name'	=> 'password',
	'id'	=> 'password',
	'value' => set_value('password'),
	'maxlength'	=> $this->config->item('password_max_length', 'tank_auth'),
	'size'	=> 30,
);
$confirm_password = array(
	'name'	=> 'confirm_password',
	'id'	=> 'confirm_password',
	'value' => set_value('confirm_password'),
	'maxlength'	=> $this->config->item('password_max_length', 'tank_auth'),
	'size'	=> 30,
);
$captcha = array(
	'name'	=> 'captcha',
	'id'	=> 'captcha',
	'maxlength'	=> 8,
);
?>
<?php echo form_open($this->uri->uri_string()); ?>
<table>
	<?php if ($use_username) { ?>
	<tr>
		<td><?php echo form_label('ユーザー名', $username['id']); ?></td>
		<td><?php echo form_input($username); ?></td>
		<td style="color: red;"><?php echo form_error($username['name']); ?><?php echo isset($errors[$username['name']])?$errors[$username['name']]:''; ?></td>
	</tr>
	<?php } ?>
	<tr>
		<td><?php echo form_label('メールアドレス', $email['id']); ?></td>
		<td><?php echo form_input($email); ?></td>
		<td style="color: red;"><?php echo form_error($email['name']); ?><?php echo isset($errors[$email['name']])?$errors[$email['name']]:''; ?></td>
	</tr>
	<tr>
		<td><?php echo form_label('パスワード', $password['id']); ?></td>
		<td><?php echo form_password($password); ?></td>
		<td style="color: red;"><?php echo form_error($password['name']); ?></td>
	</tr>
	<tr>
		<td><?php echo form_label('パスワード再入力', $confirm_password['id']); ?></td>
		<td><?php echo form_password($confirm_password); ?></td>
		<td style="color: red;"><?php echo form_error($confirm_password['name']); ?></td>
	</tr>

	<?php if ($captcha_registration) {
		if ($use_recaptcha) { ?>
	<tr>
		<td colspan="2">
			<div id="recaptcha_image"></div>
		</td>
		<td>
			<a href="javascript:Recaptcha.reload()">Get another CAPTCHA</a>
			<div class="recaptcha_only_if_image"><a href="javascript:Recaptcha.switch_type('audio')">Get an audio CAPTCHA</a></div>
			<div class="recaptcha_only_if_audio"><a href="javascript:Recaptcha.switch_type('image')">Get an image CAPTCHA</a></div>
		</td>
	</tr>
	<tr>
		<td>
			<div class="recaptcha_only_if_image">Enter the words above</div>
			<div class="recaptcha_only_if_audio">Enter the numbers you hear</div>
		</td>
		<td><input type="text" id="recaptcha_response_field" name="recaptcha_response_field" /></td>
		<td style="color: red;"><?php echo form_error('recaptcha_response_field'); ?></td>
		<?php echo $recaptcha_html; ?>
	</tr>
	<?php } else { ?>
	<tr>
		<td colspan="3">
			<p>下記に表示されるコードを入力して下さい</p>
			<?php echo $captcha_html; ?>
		</td>
	</tr>
	<tr>
		<td><?php echo form_label('確認コード', $captcha['id']); ?></td>
		<td><?php echo form_input($captcha); ?></td>
		<td style="color: red;"><?php echo form_error($captcha['name']); ?></td>
	</tr>
	<?php }
	} ?>
</table>
<?php echo form_submit('register', '登録'); ?>
<?php echo form_close(); ?>

パスワード再発行のためのフォーム『forgot_password_form.php』も下記のように変更します。

<?php
$login = array(
	'name'	=> 'login',
	'id'	=> 'login',
	'value' => set_value('login'),
	'maxlength'	=> 80,
	'size'	=> 30,
);
if ($this->config->item('use_username', 'tank_auth')) {
	$login_label = 'Email又はユーザ名';
} else {
	$login_label = 'Email';
}
?>
<?php echo form_open($this->uri->uri_string()); ?>
<table>
	<tr>
		<td><?php echo form_label($login_label, $login['id']); ?></td>
		<td><?php echo form_input($login); ?></td>
		<td style="color: red;"><?php echo form_error($login['name']); ?><?php echo isset($errors[$login['name']])?$errors[$login['name']]:''; ?></td>
	</tr>
</table>
<?php echo form_submit('reset', '新しいパスワードの発行'); ?>
<?php echo form_close(); ?>

それと、パスワード再発行用のメールも変更します。『application/views/email』フォルダの『fogot_password_html.php』ファイルを下記のように変更します。

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head><title><?php echo $site_name; ?>の新規パスワード作成</title></head>
<body>
<div style="max-width: 800px; margin: 0; padding: 30px 0;">
<table width="80%" border="0" cellpadding="0" cellspacing="0">
<tr>
<td width="5%"></td>
<td align="left" width="95%" style="font: 13px/18px Arial, Helvetica, sans-serif;">
<h2 style="font: normal 20px/23px Arial, Helvetica, sans-serif; margin: 0; padding: 0 0 18px; color: black;">新しいパスワードを作成します</h2>
パスワードをお忘れですか?大丈夫です。<br />
下記のリンクをクリックして新しいパスワードを作成して下さい。<br />
<br />
<big style="font: 16px/18px Arial, Helvetica, sans-serif;"><b><a href="<?php echo site_url('/auth/reset_password/'.$user_id.'/'.$new_pass_key); ?>" style="color: #3366cc;">新しいパスワードの作成</a></b></big><br />
<br />
リンクが動作しない場合は、下記のリンクをアドレスバーにコピーして下さい。<br />
<nobr><a href="<?php echo site_url('/auth/reset_password/'.$user_id.'/'.$new_pass_key); ?>" style="color: #3366cc;"><?php echo site_url('/auth/reset_password/'.$user_id.'/'.$new_pass_key); ?></a></nobr><br />
<br />
<br />
<a href="<?php echo site_url(''); ?>" style="color: #3366cc;"><?php echo $site_name; ?></a> ユーザーによりパスワード紛失の手続きが取られましたので、このメールを発行いたしました。 これは、新しいパスワードを作成する手続きの一部です。もし、あなたが新しいパスワードの発行を依頼していないのであれば、このメールを無視して下さい。以前のパスワードのままでご利用になれます。 <br />
<br />
<br />
ありがとうございました。<br />
<?php echo $site_name; ?> チーム</td>
</tr>
</table>
</div>
</body>
</html>

それでは、ブラウザで確認してみます。まずは、ログイン画面です。

次に、新規登録をクリックしてみます。

ログイン画面に戻って、今度は、パスワードの紛失をクリックしてみます。

新しいパスワードの発行をクリックしてみます。下記のようなメールが届きました。

修正自体も難しくありませんので、他にも『application/views』フォルダ内の『auth』フォルダと『mail』フォルダに色々ファイルがありますので、自分好みに修正して下さい。

尚、使い方は、『application/controllers』フォルダに上書き保存した『welcom.php』を見てみてば、わかると思いますが、一応説明しておきます。

$this->load->helper(‘url’);
$this->load->library(‘tank_auth’);

コンストラクタで、urlヘルパとtank_authライブラリを読み込んでいます。urlヘルパはredirectを利用するために読み込んでいます。

if (!$this->tank_auth->is_logged_in()) {
redirect(‘/auth/login/’);

これは、ログイン(認証)していなければ、『application/controllers』の『auth.php』の『login』メソッドへ移動します。

$data[‘user_id’] = $this->tank_auth->get_user_id();
$data[‘username’] = $this->tank_auth->get_username();
$this->load->view(‘welcome’, $data);

『user_id』と『username』のデータを配列$dataに代入して、ビューファイル『welcom』を開きます。

たったこれだけでユーザー認証ができるのはかなり便利です。

本日は、以上です。

タグ

2011年9月8日 | コメント/トラックバック(2) |

カテゴリー:CodedIgniter

このページの先頭へ