前回に引き続き、ログイン機能を実装します。
まずはログインフォームを作成します。前回同様に、まずはフォームを作成します。
<?php
//module/Auth/src/Auth/Form/Login.php
namespace Auth\Form;
use Zend\Form\Form;
use Zend\Form\Element;
class LoginForm extends Form
{
public function __construct()
{
parent::__construct();
$this->add(array(
'name' => 'email',
'attributes' => array(
'type' => 'text',
),
'options' => array(
'label' => 'email',
),
));
$this->add(array(
'name' => 'password',
'attributes' => array(
'type' => 'password',
),
'options' => array(
'label' => 'password',
),
));
$this->add(array(
'name' => 'submit',
'attributes' => array(
'type' => 'submit',
'value' => 'login',
),
));
$this->add(new Element\Csrf('csrf'));
}
}
続いてこちらも前回を踏襲し、コントローラーを以下のようにします。
<?php
//module/Auth/src/Auth/Controller/AuthController.php
//追加
use Auth\Form\LoginForm;
//追加
public function loginAction()
{
$form = new LoginForm();
$request = $this->getRequest();
if($request->isPost()){
$user = new User();
$form->setInputFilter($user->getInputFilter());
$form->setData($request->getPost());
if($form->isValid()) {
exit('ログインが試みられました');
}
}
return array('form' => $form);
}
最後にビューを変更します。
<?php
$title = 'signup form';
$this->headTitle($title);
$form = $this->form;
echo $this->form()->openTag($form);
echo $this->formRow($form->get('email'));
echo $this->formRow($form->get('password'));
echo $this->formHidden($form->get('csrf'));
echo $this->formSubmit($form->get('submit'));
echo $this->form()->closeTag($form);
?>
これでログインフォームが出現すると思います。
それではログインフォームを実装しましょう。Zend Framework 2 の認証機能は前作からほぼ変わらず、インターフェイスを継承したアダプタークラスが
実行します。LDAPを用いる場合と同様に、データベースでの認証もAdapterInterfaceを実装したDbTableクラスのAuthenticationメソッドで実行されます。これは認証機能なので、実際にデータベースに接続するにはデータベースと接続するアダプターを利用することになります。
ということで、まずはデータベースと接続するアダプターを取得出来るようにしましょう。コントローラーの中にgetDbAdapterメソッドを実装します。
<?php
//module/Auth/src/Auth/Controller/AuthController.php
//追加
protected $dbAdapter;
//追加
public function getDbAdapter()
{
if(!$this->dbAdapter){
$sm = $this->getServiceLocator();
$this->dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
}
return $this->dbAdapter;
}
このメソッドを用いてデータベースとの接続を行い、認証メソッドを実行します。
以下、利用法です。
<?php
//module/Auth/src/Auth/Controller/AuthController.php
//追加
use Zend\Authentication\Adapter\DbTable as AuthAdapter;
use Zend\Authentication\AuthenticationService;
//追加
public function loginAction()
{
$form = new LoginForm();
$request = $this->getRequest();
if($request->isPost()){
$user = new User();
$form->setInputFilter($user->getInputFilter());
$form->setData($request->getPost());
if($form->isValid()) {
$dbAdapter = $this->getDbAdapter();
$authAdapter = new AuthAdapter($dbAdapter);
$userData = $form->getData();
$authAdapter->setTableName('user') //対応するテーブル名 ->setIdentityColumn('email') //ユニークなカラム名
->setCredentialColumn('password'); //パスワードカラム名
$authAdapter->setIdentity($userData['email']) //受け取ったデータ
->setCredential($userData['password']);
$auth = new AuthenticationService(); //必須ではないがAuthenticationServiceを利用
$result = $auth->authenticate($authAdapter);
exit(var_dump($result->isValid()));
}
}
こんな感じで実装出来ます。
0 件のコメント:
コメントを投稿