Rodhos Soft

備忘録を兼ねた技術的なメモです。Rofhos SoftではiOSアプリ開発を中心としてAndroid, Webサービス等の開発を承っております。まずはご相談下さい。

認証 AuthComponent

認証 - 3.x

AuthComponentは三タイプの認証できる。

  1. FormAuthenticate ログインフォーム POSTで (デフォルト)
  2. BasicAuthenticate ベーシック認証
  3. DigestAuthenticate ダイジェストHTTP認証

認証ハンドラの設定

// シンプルな設定
public function initialize()
{
    parent::initialize();
    $this->loadComponent('Auth', [
        'authenticate' => [
            'Form' => [
                'fields' => ['username' => 'email', 'password' => 'passwd']
            ]
        ]
    ]);
}
>|php|
// 'all' を使って設定を記述
$this->Auth->config('authenticate', [
    AuthComponent::ALL => ['userModel' => 'Members'],
    'Basic',
    'Form'
]);

userModelはデフォルトはUsersとなっているのでそうであれば設定不要。

ログインのサンプル

public function login()
{
    if ($this->request->is('post')) {
        $user = $this->Auth->identify();
        if ($user) {
            $this->Auth->setUser($user);
            return $this->redirect($this->Auth->redirectUrl());
        } else {
            $this->Flash->error(__('Username or password is incorrect'));
        }
    }
}

unauthenticated()は認証されていないユーザがアクセスした際に呼ばれる。

認証関連のフラッシュメッセージの表示

src/Template/Layout/default.ctp の body 部でecho $this->Flash->render();を加える。

ハッシュ化

DefaultPasswordHasher

namespace App\Model\Entity;

use Cake\Auth\DefaultPasswordHasher;
use Cake\ORM\Entity;

class User extends Entity
{

    // ...

    protected function _setPassword($password)
    {
        if (strlen($password) > 0) {
          return (new DefaultPasswordHasher)->hash($password);
        }
    }

    // ...
}

現在のログインID

$this->Auth->user('id');
で取得できる。

ログアウト

AuthComponent::logout()

public function logout()
{
    return $this->redirect($this->Auth->logout());
}

ユーザ毎のリソース認可

ControllerAuthorize

公開するところ
AuthComponent::allow($actions = null)
公開アクションを拒否
AuthComponent::deny($actions = null)

コントローラのコールバックで

ControllerAuthorize