2017-06-05 18 views
0

所以我想做一個非常基本的身份驗證,並通過遵循https://book.cakephp.org/3.0/en/tutorials-and-examples/blog-auth-example/auth.html上的博客教程,我試圖讓它只使用用戶名登錄,但登錄系統不起作用因爲如何僅使用用戶名進行CakePHP3登錄

$user = $this->Auth->identify(); 

總是返回false,我已經搜索了關於Authentication的Cake文檔,但找不到任何東西來幫助我。 有人可以告訴我如何做一個costum登錄身份驗證。

當前登錄操作:

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, try again')); 
     } 
    } 

而其景觀:

<div class="users form"> 
<?= $this->Flash->render() ?> 
<?= $this->Form->create() ?> 
    <fieldset> 
     <legend><?= __('Please enter your username') ?></legend> 
     <?= $this->Form->control('username') ?> 
    </fieldset> 
<?= $this->Form->button(__('Login')); ?> 
<?= $this->Form->end() ?> 
</div> 

AuthComponent初始化:

public function initialize(array $config) 
{ 
    $controller = $this->_registry->getController(); 
    $this->eventManager($controller->eventManager()); 
    $this->response =& $controller->response; 
    $this->session = $controller->request->session(); 
} 
+0

您可以查看手動記錄用戶的身份。您可以通過檢查用戶名是否存在以及是否通過獲取用戶信息並使用setUser()方法手動記錄它們來執行此操作。 https://book.cakephp.org/3.0/en/controllers/components/authentication.html#manually-logging-users-in – spencdev

回答

0

一些試驗和錯誤我設法讓我自己的登錄帳號後只得到所有的用戶名從列在數據庫和與

$usernames = $this->UsersTable->find()->extract('username'); 

將它們存儲在一個Iterator,然後我轉換到字符串數組與

$usernamesArray= iterator_to_array($usernames); 

我檢查,如果請求的數據後,我做一個循環來檢查所有的用戶名,在那之後我修剪兩個輸入是$用戶和$ usernameArray爲en確定它們是平等的,如果是我認證我的用戶,並重新將他重定向到我的主頁面。

$usernames = $this->Table->find()->extract('username'); 
    $usernamesArray= iterator_to_array($usernames); 
    $user = $this->request->getData('username'); 
    if ($this->request->is('post')) { 
     for($i = 0 ; $i < count($usernamesArray) ; $i++){ 
      if(trim($user) == trim($usernamesArray[$i])){ 
      $this->redirect(['action' => 'index']); 
      $this->Auth->setUser($user); 
      return; 
      } 
     } 
     $this->Flash->error(__('Invalid username or password, try again')); 
    } 
    } 
0

據我所知,CakePHP的沒有記錄的方法,在用戶通過用戶名。我提供了一個可能會/看起來像什麼的例子。這是我的頭頂,並沒有經過任何測試。

public function login() { 
     if($this->request->is(['post'])) { 
      if ($this->Users->exists(['username' => $this->request->getData('username')])) { 
       $user = $this->Users->findByUsername($this->request->getData('username'))->first()->toArray(); 
       $this->Auth->setUser($user); 
      } 
     } 
    } 
+1

午餐後我會研究它。 –

+0

不起作用,當我嘗試訪問非授權頁面時仍然出現錯誤。如果你可以修改代碼,將不勝感激。 –

+0

我會測試'$ user'而不是使用'exists()',但通常通過'setUser()'手動記錄用戶,就像這樣工作得很好。所以,@DanielPereira你應該做一些調試,找出爲什麼它不適合你。 – ndm

相關問題