1

SOでかなりの数の同様の問題を見てきましたが、私の質問に答えたり、これを解決するのに役立つものはありませんでした...基本的に、NewsControllerの $this->auth->allow 行をコメントアウトすると(私は認証された人がログイン/登録以外のすべてのアクションにアクセスできるようにする場合)、ログインの無限ループが発生します。すべてのユーザーがニュースコントローラーのインデックスアクションにアクセスできるようにすると、正常に動作します。これがログイン時にループする理由はありますか?

AppController

<?php
App::uses('Controller', 'Controller');

class AppController extends Controller {
    public $components = array(
        'Session',
        'Auth' => array(
            'loginAction' => array('controller' => 'users', 'action' => 'login'),
            'loginRedirect' => array('controller' => 'news', 'action' => 'index'),
            'logoutRedirect' => array('controller' => 'users', 'action' => 'login'),
            'authorize' => array('Controller')
        )
    );

ユーザーコントローラー

<?php
class UsersController extends AppController {

    public function beforeFilter() {
        parent::beforeFilter();
        $this->Auth->allow('register');
    }

    public function login() {
        $this->layout = 'eprime_empty';
        if ($this->request->is('post')) {
            if ($this->Auth->login()) {
                $this->redirect($this->Auth->redirect());
            } else {
                $this->Session->setFlash('Invalid username or password, try again', 'default', array('class' => 'warning'));
            }
        }
    }

    public function logout() {
        $this->redirect($this->Auth->logout());
    }

ニュースコントローラー

<?php
class NewsController extends AppController {

    public $helpers = array('Html', 'Form', 'Session');

    public function beforeFilter() {
        parent::beforeFilter();
    //    $this->Auth->allow('index', 'view');
    }

    public function index() {
         $this->set('news', $this->News->find('all'));
    }
4

2 に答える 2

1

認証された人だけがログインとログアウト以外のすべてのアクションにアクセスできるようにする場合は、キーと値のペアを定義する必要はありません

'authorize' => array('Controller') 

AppCONtroller で。このキーを指定する場合、関数 isAuthorized() を指定する必要があるため、(ユーザー/ユーザーグループがそのアクションにアクセスできるようにするために指定した条件に基づいて) true または false を返します。

    public function isAuthorized(){
     return true;//or false 
   } 

再定義する必要はありません

public $helpers = array('Html', 'Form', 'Session');
public $components = array('Session');

AppController で既に定義したとおりです。

于 2012-12-10T11:30:51.933 に答える
0

Elements でリクエスト アクションを使用すると別の問題が発生する可能性があるため、以下のようにメイン コントローラーでリクエスト アクションを許可する必要があります。

 --------[app\View\view.ctp]------------
 $this->Element('comments');

 --------[app\View\Elements\comments.ctp]----------
 $comments = $this->requestAction('comments/grab');

 --------[app\Controller\CommentsController]-----------
 function beforeFilter() {
     parent::beforeFilter();
     $this->Auth->allow('grab');
 }
于 2015-02-04T01:43:18.317 に答える