CakePHP 2.0 以降の Auth コンポーネントから入る session の値が変わっているかもしれない

CakePHP 2.0 で Auth コンポーネントでエラーが発生しました。昔作ったコードでエラーが出ているので session の Auth キーの中身を展開してみることにしました。

1
2
$auth = $this->Session->read('Auth');
pr($auth);

すると以下のような配列が入っていました。

1
2
3
4
5
6
7
8
9
Array
(
    [User] => Array
        (
            [username] => hoge
            [password] => hash
        )
 
)

昔はユーザーモデルに割り当てられたテーブルの値が丸ごと入っていたような気がしたのですが、CakePHP 2.0 ではこのような値が返ってくるようです。もしユーザーテーブルの値などログイン名とパスワード以外に必要な値がある場合は以下のようにしてログイン時に値を宣言します。

1
2
3
4
5
6
$user["username"] = 'hoge';
$user["password"] = 'hash';
$user["test"] = 'test';
if($auth = $this->Auth->login($user)) {
    echo 'ログイン成功';
}

こうすればログイン後以下のように取り出せると思います。

1
2
3
4
5
6
7
8
9
10
Array
(
    [User] => Array
        (
            [username] => hoge
            [password] => hash
            [test] => test
        )
 
)

以上です。私がどこかで手順を間違えた可能性も否めませんので、皆さんも試してみてください。もし私のミスである場合、もしくはユーザーテーブルの値を含む方法がある場合は、よろしければご教授頂けると幸いです。実は久しぶりの会員機能なので思い出しながらやっております。

追記: このコードには問題があります。CakePHP 2.0 の機能を勉強中です。勉強後追記させて頂きます。

追記: ログインの処理をマニュアルでやって最後にこのような記述をしていたようです。それを忘れてその部分のみを抽出していたので、このようなコードになっていたようです。もう少し思い出すために復習します。

コメント

  1. hiromiさんのコメント

    $this->Auth->login($user)
    この書き方だと$userの情報をセッションに格納してログインするということになります。
    つまり、どんなID、パスワードでもログインが出来てしまうことになり、非常に危険です。
    Authコンポーネントのログイン部分は非常に大胆に変わっているので、ドキュメントを読みながら、またソースを読みながら、丁寧に書きなおす、またはいっそ一から書きなおしてみてはどうでしょうか。

    • webleさんのコメント

      ありがとうございます。OAuth使った処理の一部を書き換えて掲載していましたが、どうかしていました。修正させて頂きます。

    • webleさんのコメント

      今いろいろ見てたんですが、ログインの処理マニュアルで自分やってたようです。いろいろと勘違いしてたようです。ホント申し訳ないですが、SESSION内の配列が変わってるのは確かなので一応記事はこのまま残しておきます。