2016-07-01 2 views
0

Я работаю на CakePHP 3.2 и login() действия, хотите разрешить вход только тех, чей статус verified = 1CakePHP 3: Попытка получить свойство необъектных

public function login() 
    { 
     if ($this->request->is('post') || $this->request->query('provider')) { 
     $user = $this->Auth->identify(); 
     if ($user) { 
      if ($user->verified != 1) { // LINE 6 
      $this->Flash->error(__('You have not yet verified your account. Please check your email to verify your account before login'), [ 
       'params' => [ 
       'userId' => $user->id, // LINE 9 
       ], 
       ['escape' => false] 
      ]); 
      $this->redirect(['action' => 'login']); 
      } 
      $this->Auth->setUser($user); 
      $this->_setCookie(); 
      $this->Flash->success('Login Success'); 
      return $this->redirect($this->Auth->redirectUrl()); 
     } 
     $this->Flash->error(__('Invalid username or password, try again')); 
     } 
    } 

Но это дает ошибку как

Notice (8): Trying to get property of non-object [APP/Controller/UsersController.php, line 6] 
Notice (8): Trying to get property of non-object [APP/Controller/UsersController.php, line 9] 
Warning (2): Cannot modify header information - headers already sent by (output started at /var/www/html/argoSystems/projects/project_01/site/vendor/cakephp/cakephp/src/Error/Debugger.php:746) [CORE/src/Network/Session.php, line 572] 
Warning (2): session_regenerate_id() [function.session-regenerate-id]: Cannot regenerate session id - headers already sent [CORE/src/Network/Session.php, line 576] 

Примечание: номер строки был изменен в соответствии с фрагменты кода

+0

Вы изменили линии уведомлений об ошибках, чтобы соответствовать ваш сниппет? Если вы сделаете что-то подобное, то, пожалуйста, скажите людям, иначе они могут просто игнорировать вас, поскольку выяснение того, где номера строк могут указывать на это довольно утомительная задача. При этом вам действительно нужно начать немного изучать основы PHP и отладки, так как это действительно тривиальная проблема, и выяснение, почему это происходит, так же просто, как чтение документов API для 'AuthComponent :: identifiy () 'и отладки, что такое' $ user'. – ndm

+0

Спасибо @ndm отладки $ user дает правильные параметры и значения. –

ответ

1

Решил мою проблему. Это мой обновленный метод login().

public function login() 
    { 
     if ($this->request->is('post') || $this->request->query('provider')) { 
     $user = $this->Auth->identify(); 
     if ($user) { 
      $this->Auth->setUser($user); 
      if ($this->Auth->user('verified') != 1) { 
      $this->Flash->error(__('You have not yet verified your account. Please check your email to verify your account before login'), [ 
       'params' => [ 
       'userId' => $this->Auth->user('id'), 
       ], 
       ['escape' => false] 
      ]); 
      return $this->redirect($this->Auth->logout()); 
      } 
      $this->_setCookie(); 
      $this->Flash->success('Login Success'); 
      return $this->redirect($this->Auth->redirectUrl()); 
     } 
     $this->Flash->error(__('Invalid username or password, try again')); 
     } 
    } 
0

Вы могли бы решить это легко! Изменение линии 6, например, из

if ($user->verified != 1) { // LINE 6

в

$user["verified"] != 1) { // LINE 6

Смежные вопросы