2010-10-24 4 views
0

У меня проблема с авторизацией на торте, которую я просто не могу пропустить (я отлаживал и пробовал разные учебники за последние два дня). Насколько я вижу, это должно быть очень просто, проблема в том, что когда я пытаюсь войти в систему, она просто обновляет страницу входа. Почему я не могу понять, почему! Мой единственный вывод заключается в том, что должно быть что-то (основное), которое учебники считают само собой разумеющимся, что я пропустил.Компонент cakePHP auth не работает

Вот несколько отрывков:

users_controller.php

class UsersController extends AppController { 

    var $name = 'Users'; 

    function beforeFiler() { 
     parent::beforeFilter(); 
    } 
    function login() { 
    } 

    function logout() { 
     $this->Session->setFlash('You have successfully logged out.'); 
     $this->redirect($this->Auth->logout()); 
    } 
} 

app_controller.php

class AppController extends Controller { 

    var $helpers = array('Html','Form','Javascript'); 
    var $components = array('Auth'); 

    function beforeFilter() { 

     $this->Auth->loginAction = array('controller' => 'users', 'action' => 'login'); 
     $this->Auth->loginRedirect = array('controller' => 'contents', 'action' => 'index'); 
     $this->Auth->logoutRedirect = array('controller' => 'contents', 'action' => 'view'); 
     $this->Auth->loginError = 'Something went wrong'; 
     $this->Auth->allow('register', 'view'); 
     $this->Auth->authorize = 'controller'; 
     $this->set('loggedIn', $this->Auth->user('id')); 
    } 

    function isAuthorized() { 
     return true; 
    } 
} 

login.ctp

<div class="midCol short"> 
    <h3>Login</h3> 
    <div class="loginBox"> 
    <?php e($form->create('User', array('controller'=>'users','action'=>'login')));?> 
     <?php 
     echo $this->Form->input('username'); 
     echo $this->Form->input('password'); 
     e($this->Form->end(array('label'=>'Login', 'class'=>'loginButton button png')));?> 
    </div> 
</div> 

Любая помощь будет значительно приложение - спросил он, отрывая мои волосы!

+0

ли проблема с проверкой подлинности или с перенаправлением? – bancer

+0

Проблема с аутентификацией. Я проверяю против $ loggedIn в представлении, и он никогда не срабатывает – tiltos

+0

Положите это в свой 'login.ctp':' echo $ this-> Session-> flash ('auth'); 'Также создавайте сгенерированные SQL-запросы все в порядке? Он существует, существует ли он? – deceze

ответ

0

Спасибо за совет, но я закончил тем, что сломал его и снова построил с нуля. Не совсем точно, почему он изначально ломался, возможно, не вызывал встроенные функции с американским английским!

0

Компонент Auth будет перенаправляться на страницу перед входом в систему. Если на этой странице была страница входа в систему, в которую будет перенаправляться.

Когда вы тестируете, вероятно, что вы обновляете страницу входа в систему, поэтому при успешном входе в систему вы перенаправляетесь. Вы можете проверить это, пытаясь выполнить действие, защищенное Auth после входа в систему.

Это также дает мне много головных болей - я думаю, что текущая функциональность компонента немного неуклюжаема в этом отношении.

0

У меня была такая же проблема, и я обнаружил, что мне пришлось перезапустить службу mySQL. Как только он был перезапущен, я перестал перенаправлять страницу входа в систему. Надеюсь, это поможет.

2

Просто для документации, поскольку мне было трудно найти ответ для CakePHP 2.x в Интернете. Этот материал должен быть «правильным» для использования проверки подлинности формы:

  • Конфигурация должна быть права, например. в вашем UsersController (конфиг поля действительно требуется только когда имена отличаются в БД):

    public $components = array(
        'Auth' => array(
         'authenticate' => array(
          'Form' => array(
           'fields' => array(
            'username' => 'username', 
            'password' => 'password' 
           ), 
          ) 
         ) 
        ) 
    ); 
    
  • Вы должны использовать форму Helper: форма-> создать добавляет скрытое поле ввода («пост»), и имена полей ввода, сгенерированных Form-> input(), следуют соглашению, которое ожидает компонент Auth.

  • Пользователь-> логин не должен передавать пользовательские данные в Auth-> login(). Компонент Auth будет принимать данные auth из формы (= запрос).

+1

Это сработало для меня. Мне не хватало дополнительного вложения «полей» в «authenticate»/«Form». – mile

0

Собираться выбросить что-то здесь. У меня была почти неразрешимая проблема с аутентификацией cakephp. Завершилось выполнение некоторой отладки вокруг него и выяснилось, что во время подготовки моей базы данных я создал поле для пароля, которое прекрасно умело хранить обычные пароли ... но ... когда вы начинаете применять хеширование паролей, вам нужно намного больше ,Мой код был в порядке, но мне пришлось добавить в поле VARCHAR больше места для пароля, прежде чем я смогу войти в систему. Если у вас возникла проблема с аутентификацией - убедитесь, что поле вашего пароля имеет достаточный размер и не усекается, как мой был. Принял меня целый день, чтобы найти это. DOH!

0

Поправьте меня, если я ошибаюсь, но должен не быть код для перенаправления или что-то внутри функции входа

function login() { 
} 

должен не быть чем-то вроде

public function login() 
{ 
if ($this->request->is('post')) { 
    $user = $this->Auth->identify(); 
    if ($user) { 
     $this->Auth->setUser($user); 
     return $this->redirect($this->Auth->redirectUrl()); 
    } 
    $this->Flash->error(__('Invalid username or password, try again')); 
    } 
} 
Смежные вопросы