完全に機能するCake 1.3アプリケーションを最近リリースされた2.0バージョンに移行した後、認証は機能しなくなりました。CakePHP 2.0で認証が再び機能するには?
私はAuthComponent
の呼び出しと、更新された2.0マニュアルに従ってlogin
アクションの構造を変更しました。無駄です。奇妙なことは、ユーザーが実際に$this->Auth->login()
によって検証され、ユーザーが$this->Auth->redirect()
で設定されたURLにリダイレクトするログイン機能の部分に達することです。しかし、そのリダイレクトの後で$this->Auth->user()
は空を返し(AuthComponent::user()
と同様)、ユーザーはAuthコンポーネントによってログインされません。
処理中にCakeがエラーをスローしない場合、 'auth'のフラッシュメッセージは空のままです。
ユーザーは、ID、ユーザー名、電子メール、パスワード、タイムスタンプの列を含む単純なデータベーステーブルに格納されます。パスワードはハッシュされており、新しいCake 2.0メソッドを使っていくつかのユーザーを追加しました。
これはAppController.phpのコードです:
<?php
class AppController extends Controller {
public $helpers = array('Session', 'Html', 'Time', 'Form', 'Text');
public $components = array('Session', 'RequestHandler', 'Auth');
public function beforeFilter() {
$this->Auth->loginAction = array('controller' => 'users', 'action' => 'login');
$this->Auth->loginRedirect = array('controller' => 'maps', 'action' => 'index');
$this->Auth->logoutRedirect = array('controller' => 'maps', 'action' => 'index');
}
}
?>
UserController.php:
<?php
class UsersController extends AppController {
public $name = 'Users';
function beforeFilter() {
parent::beforeFilter();
}
function login() {
if ($this->request->is('post')) {
if ($this->Auth->login()) {
return $this->redirect($this->Auth->redirect());
}
}
}
function logout() {
$this->redirect($this->Auth->logout());
}
}
?>
User.phpモデル。私は、この問題を解決した後、当面は無効フォーム検証しました:私はまたに$components
変数に認証機能の一部を設定しようとした
<?php
echo $this->Form->create('User');
echo $this->Form->input('username', array('label' => 'Username', 'before' => '<p class="input" id="username">', 'after' => '</p>', 'between' => '<br />', 'div' => false));
echo $this->Form->input('password', array('label' => 'Password', 'before' => '<p class="input" id="password">', 'after' => '</p>', 'between' => '<br />', 'div' => false));
echo $this->Form->end('Login');
?>
:
<?php
class User extends AppModel {
public $name = 'User';
}
?>
ログインビューをAppController
も正常に動作しませんでした。
public $components = array(
'Auth'=> array(
'loginAction' => array(
'controller' => 'users',
'action' => 'login',
),
'loginRedirect' => array(
'controller' => 'maps',
'action' => 'index',
),
'authenticate' => array(
'Form' => array(
'fields' => array('username', 'password')
)
)
)
);
ここで問題が発生していますか?おそらくルーティング?私は今$this->Auth->user()
が実際に$this->Auth->login()
への呼び出し後に正しいユーザーが移入されて知っているがUserControllerでのログイン方法にいくつかのデバッグ文を追加した後 :
require CAKE . 'Config' . DS . 'routes.php';
UPDATE:私は除いて、すべてのルートをコメントアウトしました。しかし、別のコントローラにリダイレクトした後、ログインセッションは完全に失われます。だから私はまだここで何がうまくいかないのか分からない。
UPDATE 2 私は自分の作業1.3アプリケーションを取って、私は最後の時間をやったようにそれに移行コンソールのスクリプトを実行して、移行プロセスを再起動しました。
今回は、カスタムコンポーネントに関する2つのエラーが原因でスクリプトが停止していることに気付きました。コンポーネントクラスでは、1.3のdefault:Objectではなく、Componentを拡張する必要があります。
これらのコンポーネントのエラーを修正した後、移行スクリプトを再度実行しました(最初の移行の試行では無視したことがあります)。新しいAuthCompenent呼び出しが実装されました。これまでのところすべてが正しく動作しているようです。 Cakeはエラーメッセージを出力しなかったので、今何が違うのか、何が最初に間違っていたのかは分かりません。
更新3 これは怪しいです。私はそれを解決すると思ったが、コードを別の開発マシンに転送した後、Authは突然動作を停止する。私の主なセットアップでは動作していますが、別のテストでは同じシナリオで失敗します。キャッシュをクリアしましたが、まだ動作していません。 Cakeはエラー出力を生成しません。
UPDATE 4 私のマシンではセッションの問題があるようです。セッションをクッキーに保存するように設定したところで、突然Authが再び動作を開始します。なぜ、デフォルトのSessionが動作していないのかわかりません。その場合、どこでデバッグを開始するのかわかりません。
データベースセッションを定義すると、通常のセッションと同じ結果が得られます。認証が機能しなくなります。
はい、私は公共$コンポーネント変数で、私のテストのいずれかで行いました。 – mensch
あなたのセッション設定はどうですか? http://book.cakephp.org/2.0/ja/development/sessions.html – Dan737
セッションは既にCore.phpで設定されていますが、残念ながら新しい設定キーを直接書くことはうまくいきませんでした。 – mensch