質問

私はCodeigniterをかなり初めてであり、ユーザー認証のためにIon Authを使用しています。 ION AUTHライブラリを使用すると、次のようなユーザーオブジェクトを取得します。

  $user = $this->ion_auth->get_user();
  echo $user->email;

ユーザーがログインしている場合は、$ユーザーオブジェクトを(コントローラーのいずれか)で使用できるようにします。これどうやってするの? (私はcodeigniter2を使用しています)

役に立ちましたか?

解決

私のこのブログ投稿 ION_AUTHを使用して特別に詳細に進み、アプリケーション全体(ビューを含む)が現在のユーザーの情報にアクセスできるようにします。

短いバージョン...(特に手元のトピック専用)

これをあなたに追加します MY_Controller.php ファイル

class User_Controller extends CI_Controller {

    protected $the_user;

    public function __construct() {

        parent::__construct();

        if($this->ion_auth->logged_in()) {
            $data->the_user = $this->ion_auth->get_user();
            $this->the_user = $data->the_user;
            $this->load->vars($data);
        }
        else {
            redirect('/');
        }
    }
}

次に、アプリケーションでこのようにコントローラーを作成するだけです

class App_Controller extends User_Controller {

    public function __construct() {
        parent::__construct();
    }

    function index() {
        //do stuff
    }
}

次に、コントローラーだけでなく、アクセスできます。 $this->the_user しかし、あなたも持っています $the_user すべてのビューにロードされます $this->load->vars()

他のヒント

通常、セッションでこのようなものをキャッシュしますが、私はほとんどのCIアプリでそれから離れました。

例:ユーザーをログに記録し(ユーザーデータのキャッシュ)、プロフィールページでメールを更新します。これで、キャッシュをリロードする必要があります。他の多くのことがこのリロードを駆動できます。通常、私がこれ以上キャッシュするのはIDです。そうすれば、あなたがしていることをして、必要なページでユーザーのデータを取得します。

私が見つけたことの1つは、持っていることです ベースコントローラー. 。たとえば、RegisteredUserControllerがあります。アクションがすべてユーザーをログインする必要があるコントローラーは、これを拡張します。そうすれば、ログインして、ユーザーデータを1つの場所(コンストラクター内)に取得するなどのことを保持できます。例えば:

class RegisteredUserController extends CI_Controller {
    var $user;

    function  __construct()  {
        parent::__construct();
            $this->user = $this->ion_auth->get_user();
        }
}

次に、拡張するコントローラー RegisteredUserController ただのコントローラーの代わりに、 $this->user. 。このパターンに従うと、キャッシュに頼らずにすべてのページ(コントローラーを拡張する)で取得できます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top