2011-08-08 3 views
1

私はCodeigniter Webサイトのユーザーを認証するためにカスタムMY_Controllerを利用しています。Codeigniter:ユーザー認証のためにカスタムMY_Controllerを効果的に使用 - モデルへのvarsの渡し

$this->load->vars($data);を使用して、ビュー内のユーザー情報にアクセスできるようにしました。

私の最初の質問は、$this->load->vars($data);はモデルでのアクセスを許可していますか?その場合、どのように情報を見つけることができませんでした。そうでない場合は、毎回コントローラーを通過させることなく、ログインしたユーザーのユーザー名を自分のモデルにどのように取得できますか?ユーザーがログインしていない場合

は第二に...、私はこれが私の口座コントローラはまた、MY_Controllerを拡張するので、それは無限のリダイレクトループで立ち往生を除き、素晴らしい作品redirect(base_url() . 'account/login');

それらをリダイレクトします。私はこのページのカスタムコントローラーを拡張することはできませんが、ログインしたユーザーがログインページを見ることができないような理由はありません。

最後に、ユーザーがログインしている場合は、$user['username']がマイビューに定義されています。 ユーザーがログインしていない場合、ユーザーは定義されていません。

私のコードの中にif($user['username']!=''){がある場合、ユーザがログインしているときにはすべて正常でコードは実行されますが、ログインしていないユーザはエラーが表示されます。 ...

困難でCodeIgniterの...ここの周りの仕事は

は何ですか?

多くのありがとうございます!

答えて

1

私は、セッションにユーザーの詳細を保存することについてChrisに同意します。

ユーザがログインしているかどうかを確認するには、ゲートキーパー機能を作成し、コントローラ(したがってビュー)を保護するためにコントローラ構造に配置することができます。 何かが好きです。

function gatekeeper() 
{ 
    if (!isset($this->session->item('username')) || !$this->session->item('username')) 
    { 
     redirect('/account/login); 
    } 
} 
+0

これは基本的に私が持っているものですが、MY_Controllerの構造を除いて、すべてのページで自動です。ユーザーがログインする必要がある各コントローラ内で単純に複製する方が簡単だと言っていますか? Thx –

+0

MY_Controllerにある場合は、MY_Controllerを拡張するすべてのコントローラに対して呼び出されます。これがあなたが望むものなら、それをそのままにしておいてください。コントローラを選択して実行する必要がある場合は、ゲートキーパーをヘルパー機能にして個々のコントローラから呼び出すことができます。 – Rooneyl

+0

または、ログイン、グループ、管理者などのユーザーを制御する機能が必要な場合は、いつでもhttp://benedmunds.com/ion_auth/を使用できます – Rooneyl

1

セッションに現在ログインしているユーザーのユーザーデータを格納することを検討し、そのユーザーがクエリを実行して毎回ビューに渡す必要はありません。 $this->session->userdata('your_userdata_var_name');を使用して、コントローラ、ビュー、モデル内のセッションデータにアクセスできます。

$user['username']がエラーを表示する原因は、完全に削除されている可能性があります。空の文字列('')に設定されていない可能性があります。この場合、未定義の配列キーにアクセスしようとしています。

+0

ユーザーがログインすると、それらを認証し、セッションvar 'logged_in'を設定します。ユーザーには多くのデータが関連付けられているので、それをセッションとして持たない方が簡単です。セッションのすべてのユーザー情報を格納するセキュリティの意味は何ですか?ユーザーなどデータを変更しますか? まあ、そうだと思います。しかし、もしユーザーがログインしていなければ、$ user ['username']を設定したくないです - それはポイントですが、isset()は同じものを返しますエラー.. –

+0

私はそれが好みの問題だと思います。私はすべてのページ要求で余分なクエリを実行していないようにセッションでそれを保持し、セッション情報を格納するためにデータベースを使用する場合、何かを更新することはできません。私はセッション中のユーザーのためのすべての情報を保存しませんが、私は定期的に(つまり、ユーザーID、ユーザー名、フルネームなど)。 –

関連する問題