LoginSignup
0
0

More than 3 years have passed since last update.

「ログインできない!」と言われた話

Last updated at Posted at 2020-07-31

前にセッションの記事を書きましたが、それに関わる話
こういうこともあるんですね、という共有です

経緯

先週まで普通に動いてた管理画面にて、「ログインできないんですけど…」という作業者からの問い合わせがありました。
環境は

  • cakephp2.4.10
  • nginx
  • php-fpm

現象

  • cakephp2のAuthで構築したログイン画面にIDとパスを入れる
  • その直後ログイン画面にリダイレクトされる
  • 以降繰り返しでTOPに入れない

先に結論

原因はセッションファイルを読み込めていないことでした。
ログイン状態を記憶できてなかったのでこんな不思議現象が。。

下記は対応記録です。

対応記録

まずはログを確認

何も出てない。ということはつまりエラーではない。
急に発生したということでサーバーの環境が変わった方を疑いました。
ちなみにログ出力先の設定はデフォルトなのも確認しました。

ログイン処理が成功してるかどうか確認

public function login() {
        $this->log("認証処理開始", LOG_DEBUG);
        if ($this->request->is('post')) {
            if ($this->Auth->login()) {
                $this->log("ログイン成功", LOG_DEBUG);
                $this->redirect($this->Auth->redirect());
            } else {
                $this->log("ログイン失敗", LOG_DEBUG);
                $this->Session->setFlash(__('Invalid username or password, try again'));
            }
        }
    }

こんなログを仕込んでみたところ、ちゃんと「成功」のログが。
ということでここまでは正常のようです。
(ついでにログの出力先も予想通りなので、やっぱりエラーは出てないようです。)

ログイン成功してるけどまたログインに飛ばされる、ということはもしかしてログイン状態が記憶されてない?
Authではそれをセッションで管理しているため、保存できてるか確認します。

セッションを保存できてるか確認

https://qiita.com/kazu56/items/a54596e963d9e2b71f2e
セッション保存できてるかどうかは$this->Auth->user()を見ればいいようです。
AppControllerの先頭にログを仕込むと

2020-07-27 11:27:42 Debug: セッション保存のユーザー :

ということで空文字が出力されてます。やっぱり保存されてないっぽい
自分で適当に$Session['test']を定義してみても同様

設定確認

https://inoccu.com/blog/2012/11/21/223145.html
cakephpでセッションをデフォルトで使うとファイルで管理されます。
ということで、このファイルにアクセスできてない説が濃厚。
core.phpの設定は


Configure::write('Session', array(
        'defaults' => 'php',
        'timeout' => 60,
    ));

クックブック見ると「phpの設定に準拠」とのことなのでphp.iniを確認

session.save_path => no value => no value

なんだって…orz
デフォルトのパスにもない…orz

保存パスを探して三千里

https://qiita.com/cranpun/items/02eaa615c523aac8f375
設定ファイルで上書きされてる可能性があるとのこと。
問題の環境はnginxですがphp-fpmも使ってるので上書きされてる可能性はありそう。
ただし設定ファイルはめちゃくちゃな数があり、探せど探せど見つからないので諦めました。
(どうせ今の設定だとアクセスできてないし)

cakeの設定を変えればいいじゃない


Configure::write('Session', array(
        'defaults' => 'php',
        'timeout' => 60,
    ));


Configure::write('Session', array(
        'defaults' => 'cake',
        'timeout' => 60,
    ));

に変えました。これでAPP/tmp/sessionに保存されるようになります。
sessionフォルダを作って権限設定して解決!と思いきやまだダメでした。

cookie削除しなきゃダメですよ

セッションの同一性はcookieで判断されます。
よってダメだった時のcookieが残ってるとうまくいきません。
ということでブラウザのCookieを削除して確認するとやっと正常に動いてくれました。

原因推測

  • 使ってるサーバーはNFSを使ってソースコードの共有をしていた
  • そのノリでセッションファイルも共有していたのでは?という推測。
  • そしてそこにアクセスできなくなったのが大元の原因では?という推測

古いシステムのため設定を知ってる人もいない+ドキュメントにも書いてないので迷宮入り…
仮に共有されてたとしても、このサーバーはELBを噛ませてるわけでもないので問題ないと判断しました。

教訓

  • ログイン系に異常があったらセッション周りも疑う
  • php.iniの設定は上書きされてることもある。
  • 普通と違う設定使ってるならドキュメントを書きましょう(ブチギレ)
0
0
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
0
0