PHP
CakePHP

俺のCakePHP - 2.8 別ユーザで強制ログイン

More than 1 year has passed since last update.


経緯

初回アクセス時にはユーザIDをuuid、パスワードを特定の文字列から自動生成し、自動的にユーザを作ってしまい、そのままログインさせるという、Webシステムばっかり作ってた俺にとっては、少々興味深いシステム構築に携わった。

よくあるWebサービスのように普通に、IDとパスワードではログインさせない仕組みで、これは避けられないということ。

で、見てる環境が変わると当然別ユーザが作られてしまい、同じ人でも違うマシンで別ユーザになってしまう。

それに対応させるために、古い方にメールアドレスを登録しておけば、新しい方で同じメールアドレスで認証し、元のユーザに戻れる仕組みが必要。


仕組みを考える


  1. まず、コントローラにemailを渡す

  2. そのemailがヒットしたレコードは旧ユーザのはずなので、uuidを拾っておく

  3. 強制的にログアウトさせる

  4. uuidとpassword(全ユーザ固定)の組み合わせで、擬似的にpostデータを生成しておく

  5. 強制的にログインさせる

<?php

public function force_login() {

// emailを拾う
$email = $this->request->data('User.email');

// findで旧ユーザを取得
$preUser = $this->User->findByEmail($email);

// 新ユーザをログアウトさせる
$this->Auth->logout();

// postデータに旧ユーザのアカウント情報をいれておく
$this->request->data = array(
'User' => array(
'uuid' => $preUser['User']['uuid'],
'password' => 'static_password'
)
);

// 旧ユーザとしてログインさせる
$this->Auth->login()

流れとしてはこんな感じで出来た。

上記はエラー処理を入れてないけど、適宜Exceptionなどいれておくと良いかもね。


注意

こんな仕組み使う人いるのかな?

ちなみに某スマートフォンアプリのAPIとして作った。

機種変しても前のユーザでログインさせたいってことね。