3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

初めてPHPのフレームワーク(Yii)を使ってみる その2

Last updated at Posted at 2014-09-18

手探り状態ですが、なんとかここまで進みました。ここから、実際にコードを触ったりしていきます
今回は、ユーザテーブルにアクセスして、ログイン(ユーザ認証)するところまでを作ってみます


#UserモデルとUserProfileモデルの作成
元々作られているUserクラスを削除して、新たにデータベースに合わせたUserクラスを作成する
htdocs/ec_site/protected/models/User.phpを削除
次にブラウザからhttp://www.example.com/ec_site/index.php?r=giiにアクセス
(パスワードは「その1」で最後に設定したGiiのパスワード)
Model Generatorリンクをクリックして、Model Generatorページへ
Table Nameフィールドにec_user(ユーザテーブル名)、Table Prefixフィールドにec_と入力し、Previewボタンを押す
下に作成されるコード一覧(models/User.php)が表示されるので、Generateボタンを押すと、htdocs/ec_site/protected/models/User.phpが生成される
同様にして、UserProfileモデルも作成する

#日本語化
loginForm.phpとlogin.phpははじめに生成されるものをほとんどそのまま使える。
ただし、usernameにあたる部分をメールアドレスにしたので、わかりやすいようにusernameをmailaddrに変える。また、ブラウザでの表示を日本語に変える。

##LoginForm.phpの編集
htdocs/ec_site/protected/models/LoginForm.phpの中のusernameをmailaddrに置換し、英語表示を日本語に変える。

htdocs/ec_site/protected/models/LoginForm.php.php
<?php
...
	public $mailaddr;
	public $password;
	public $rememberMe;

	private $_identity;
...
	public function attributeLabels()
	{
		// 日本語のラベルに書き換える
		return array(
			'mailaddr' => 'メールアドレス',
			'password' => 'パスワード',
			'rememberMe' => 'ログイン状態を保存する',
		);
	}

	/**
	 * Authenticates the password.
	 * This is the 'authenticate' validator as declared in rules().
	 */
	public function authenticate($attribute,$params)
	{
		if(!$this->hasErrors())
		{
			$this->_identity=new UserIdentity($this->mailaddr,$this->password);
			if(!$this->_identity->authenticate())
				$this->addError('password','メールアドレスかパスワードが正しくありません');
		}
	}
...

##login.phpを編集
login.phpの中のusernameをmailaddrに置換し、英語表示を日本語に変える

htdocs/ec_site/protected/views/site/login.php
...
<h1>ログイン</h1>

<p>メールアドレスとパスワードを入力してください:</p>

<div class="form">
...
	<p class="note"><span class="required">*</span>は必須事項です</p>

	<div class="row">
		<?php echo $form->labelEx($model,'mailaddr'); ?>
		<?php echo $form->textField($model,'mailaddr'); ?>
		<?php echo $form->error($model,'mailaddr'); ?>
	</div>
...
	<div class="row buttons">
		<?php echo CHtml::submitButton('ログイン'); ?>
	</div>

<?php $this->endWidget(); ?>
</div><!-- form -->

#認証部分を作る
##UserIdentuty.phpを編集
htdocs/ec_site/protected/components/UserIdentity.phpを編集

htdocs/ec_site/protected/components/UseeIdentity.php
<?php

/**
 * UserIdentity represents the data needed to identity a user.
 * It contains the authentication method that checks if the provided
 * data can identity the user.
 */
class UserIdentity extends CUserIdentity
{
	private $_id;

	public function authenticate()
	{
		$username=$this->username;
		$user=User::model()->find('mailaddr=?',array($username));
		if($user===null)
			$this->errorCode=self::ERROR_USERNAME_INVALID;
		else if(!$user->validatePassword($this->password))
			$this->errorCode=self::ERROR_PASSWORD_INVALID;
		else
		{
			$this->_id=$user->id;
			$this->username=$user->mailaddr;
			$this->errorCode=self::ERROR_NONE;
		}
		return $this->errorCode==self::ERROR_NONE;
	}

	public function getId()
	{
		return $this->_id;
	}
}

##CUserIdentity.phpを編集
usernameをmailaddrに替えたために、継承元ファイルも変えなければならなくなった。yii/framework/web/auth/CUserIdentity.phpの中のusernameをmailaddrに置換する

##パスワードのチェックをするメソッドを追加する
パスワードのバリデーションチェック、ハッシュと検証をするメソッドをhtdocs/ec_site/protected/models/User.phpに追加する。ついでにラベルを日本語化しておく

htdocs/ec_site/protected/models/User.php
...
	public function attributeLabels()
	{
		return array(
			'id' => 'ID',
			'mailaddr' => 'メールアドレス',
			'password' => 'パスワード',
			'auth' => 'Auth',
		);
	}
...
	public function validatePassword($password)
	{
		return CPasswordHelper::verifyPassword($password,$this->password);
	}
 
	public function hashPassword($password)
	{
		return CPasswordHelper::hashPassword($password);
	}
...

#テスト
MySQLAdminでec_userに適当なデータを1行ぶん作り(パスワードはハッシュがかかっているので、/htdocs/ec_site/protected/date/schema.mysql.sqlのINSERT文からdemoまたはadminをハッシュした文字列をコピーするといい)、サイトの「Login」タブからログインしてみる


どうでしょうか。うまくいきましたか?
次はデータの更新作業をしてみます。

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?