web-dev-qa-db-ja.com

ユーザーがビュー内にログインしているかどうかをCakePHPがチェックします

私は次のコードを持っています:

    <?php

    if (!$this->Auth->user())
    {
        echo $this->element('header');
    }
    else
    {
        echo $this->element('header-bar');
    }

    ?>

ログインしたユーザーに対して異なるヘッダーを表示する必要がありますが、次のエラーをスローする私のビュー内:

Notice (8): Undefined property: View::$Auth [APP/views/layouts/page.ctp, line 17]
Fatal error: Call to a member function user() on a non-object in /Users/cameron/Sites/thehive/app/views/layouts/page.ctp on line 17

どうすれば修正できますか?ありがとう

24
Cameron

注:meotimdihiaの 以下の回答 も確認してください。 ロットのアップ投票があります。


Authコンポーネントは、コントローラーで使用するためのものです。コントローラで認証を確認し、ビューの変数を設定します(例:$this->set('authUser', $this->Auth->user());)。次に、あなたのビューで次のことができます:

if (!$authUser)
{
    echo $this->element('header');
}

これをすべてのコントローラーメソッドに対して自動的に実行する場合は、cake/libs/controller/app_controller.phpこれにより、Authコンポーネントが含まれます。

30
webbiedave

$this->set(compact('authUser'));を実行する必要はありません。Viewでのみこれを使用します。

if ($this->Session->read('Auth.User')){
// do something 
}
88
meotimdihia

CakePHP 2.x現在:

<?php if (AuthComponent::user('id')): ?>
   Logged in as <?= AuthComponent::user('name') ?>
<?php endif; ?>
50
jesal

このページの回答を要約するには、使用しているCakePHPのバージョンに基づいて次のいずれかを評価してください。

バージョン1.xの場合

$this->Session->read('Auth.User')

バージョン2.xの場合

AuthComponent::user('id')

Foreバージョン3.x

$this->request->session()->read('Auth.User.id')
16
Mr Griever

これは、Cakephp 3+で機能します(修正:セッションデータに合わせて「Auth.User.username」)

<?php

if (is_null($this->request->session()->read('Auth.User.username'))) {

    echo "....logged out";

} else {

    echo "You are Logged in As " . $this->request->session()->read('Auth.User.username'); 

}

?>
11
Lee Nielsen

cakePHPを使用したのはしばらく前ですが、CakePHPがビューの認証をサポートしていないことを覚えている限りです。もちろんできることは、ビューで使用するためにコントローラーの変数を設定することです

<?
   class AppController {
     ....
     function beforeFilter(){
       ....
       $this->set('auth',$this->Auth);
     }
     ....
   }
?>

そして、このようなビューでそれを使用します

$auth->....

または、Ritesh Agrawalによって作成されたAuthHelperを使用できます。

http://bakery.cakephp.org/articles/ragrawal/2008/07/29/authhelper

[〜#〜] btw [〜#〜]

誰かが@webbiedaveにログインしているかどうかをテストするだけなら、MVCスタイルの方が賢明だと思います。

それにもかかわらず、ビューでユーザーデータにアクセスする必要がある場合は、Authコンポーネントからuserinfoを抽出し、それをコントローラーで設定し、ビューで使用してそれを使用します

よろしく

5
Jeremy S.

これを試して

class AppController extends Controller{
    $this->user = false;

   public function beforeFilter(){
     $this->user = $this->Auth->user();
   }

   public function beforeRender(){
      $this->set('logged_user',$this->user);
   }
}

これで、ビューで$ logged_userを次のように確認できます。

if($logged_user){
  // users logged in $logged_user have all the details
}else{
  // not logged in
}
2
Spandan Singh

cakephp 3では、このようなビューで認証セッションを確認できます

if($this->request->Session()->read('Auth.User')){
//do when login
}
else{
 //do not login
}
2
YeHtunZ

コントローラー、できればサイト全体のすべてのコントローラーに継承されるAppControllerからユーザーの詳細を設定する必要があります。 app_controller.phpを作成/修正して、このbeforeFilter();メソッドを含めます。

<?php
class AppController extends Controller {

function beforeFilter() {
    $user = $this->Auth->user();
    $this->set(compact('user'));
}

これにより、ビューに$userという変数が設定され、ユーザーがログインしていない場合は空になり、ログインしている場合はデータが含まれます。

0
Dunhamzzz

言及する価値があるものが見つかりました。CakePHP3.xセッションハンドラーは非推奨です。

ビュー内のセッションにアクセスする場合は、リクエストハンドラを介してアクセスできます。私たちは使わなければなりません

<?php
   // For CakePHP 3.x to access all user information
   $this->request->session()->read('Auth.User');

  // For CakePHP 3.x to check session
  if($this->request->session()->read('Auth.User.id')) {

  }
?>
0
Amit Sarwara
//In the views (or layout)
$session->check('Auth.User.id');

//In controller
$this->Auth->User('id'); 
0
Sumith Harshan

それがcakephpバージョン3.7.8セッションの誰もが助けた場合、リー・ニールセンのコメントを更新するために、セッションがgetSessionに切り下げられました

if (is_null($this->request->getSession()->read('Auth.User.username'))) {

echo "....logged out";

} else {

echo "You are Logged in As " . $this->request->getSession()->read('Auth.User.username'); 

}
0
infobuster