2015-11-01 86 views
0

是否可以將CakeDC的用戶插件配置爲使用電子郵件字段作爲用戶名?CakeDC用戶插件:使用電子郵件字段作爲用戶名

默認情況下,在用戶插件中都有用戶名和電子郵件字段,所有工作都很棒!但是我想使用電子郵件作爲用戶名進行驗證,所以用戶註冊可以簡化。

我曾嘗試通過加載在的AppController驗證組件重寫UsersAuthComponent,但登錄停止工作,並說「錯誤的用戶名或密碼」。

public function initialize() 
{ 
    parent::initialize(); 
    $this->loadComponent('Flash'); 
    $this->loadComponent('Auth', [ 
     'loginAction' => [ 
      'plugin' => 'CakeDC/Users', 
      'controller' => 'Users', 
      'action' => 'login', 
     ], 
     'authenticate' => [ 
      'all' => [ 
       'scope' => ['active' => 1] 
      ], 
      'CakeDC/Users.RememberMe', 
      'Form' => [ 
       'fields' => ['username' => 'email', 'password' => 'password'] 
      ] 
     ], 
     'authorize' => [ 
      'CakeDC/Users.Superuser', 
      'CakeDC/Users.SimpleRbac', 
     ], 
     'storage' => 'Session' 
    ]); 

    $this->loadComponent('CakeDC/Users.UsersAuth'); 
} 

繼文檔,我也bootstrap.php中關掉UsersAuthComponent

Configure::write('Users.auth', false); 

有沒有一招?我相信這是可能的,或者可能是一個錯誤?

我使用CakePHP 3.1和CakeDC用戶插件3.1

回答

0

我想這是MultiColumnAuthenticate的用途,只是看在GitHub上的插件。嘗試是這樣的:。

public function initialize() 
{ 
    parent::initialize(); 
    $this->loadComponent('Flash'); 
    $this->loadComponent('Auth', [ 
     'loginAction' => [ 
      'plugin' => 'CakeDC/Users', 
      'controller' => 'Users', 
      'action' => 'login', 
     ], 
     'authenticate' => [ 
      'all' => [ 
       'scope' => ['active' => 1] 
      ], 
      'CakeDC/Users.RememberMe', 
      'FOC/Authenticate.MultiColumn' => [ 
       'fields' => [ 
        'username' => 'username', 
        'password' => 'password' 
       ], 
       'columns' => ['username', 'email'], 
       'userModel' => 'Users', 
      ] 
     ], 
     'authorize' => [ 
      'CakeDC/Users.Superuser', 
      'CakeDC/Users.SimpleRbac', 
     ], 
     'storage' => 'Session' 
    ]); 

    $this->loadComponent('CakeDC/Users.UsersAuth'); 
} 

在登錄時這將覈對電子郵件和用戶名

+0

嗨艾薩克!感謝您的回答......不幸的是,我到現在還沒有時間來測試它。 我正在尋找「** FOC/Authenticate.MultiColumn **」插件,但該網站說不再維護。但它幫助導航我那裏得到我所需要;-) FOC在說在GitHub上的信息: 「** MultiColumnAuthenticate,但是現在可以用自定義查找CakePHP中取得3 **」 所以我意識到,必須用蛋糕3.1以乾淨的方式完成! **和它的工作。** – user3135308

+0

錯誤在於,我一直從我的模板發送錯誤的輸入名稱: '$ this-> Form-> input('username');' 而不是 '$ this-> Form-> input('電子郵件');' 所以,即使配置好,它也沒有得到配置的電子郵件字段!我只是假設,CakeDC插件會爲我渲染這個字段,但它並沒有,.ctp模板必須進行自定義。 – user3135308

+0

我確認,如上面主要帖子中提到的那樣,重寫Auth:'...'Form'=> [ 'fields'=> ['username'=>'email','password'=>'password'] ] ...''在您的自定義配置中** users.php **只會使用CakePhp3.1 + CakeDC用戶插件。 這裏有很好的文檔:[鏈接](http://book.cakephp.org/3.0/en/controllers/components/authentication.html)(查找「字段」) – user3135308

0

這件作品是你可能缺少的是覆蓋login.ctp模板來改變形式,讓用戶輸入他的電子郵件地址

爲此,您需要在/src/Template/Plugin/CakeDC/Users/Users/login.ctp下創建一個文件,其中包含您希望用於登錄頁面的內容(通常您會希望在每個應用中覆蓋此頁面),並確保您在該視圖中創建輸入「電子郵件」。該代碼可以是這樣

<div class="users form"> 
    <?= $this->Flash->render('auth') ?> 
    <?= $this->Form->create() ?> 
    <fieldset> 
     <legend><?= __d('Users', 'Please enter your username and password') ?></legend> 
     <?= $this->Form->input('email', ['required' => true]) ?> 
     <?= $this->Form->input('password', ['required' => true]) ?> 
    </fieldset> 
    <?= $this->Form->button(__d('Users', 'Login')); ?> 
    <?= $this->Form->end() ?> 
</div> 

,如果你想保持社會登錄鏈接,您可以使用CakeDC /用戶login.ctp模板爲例,還記得我,等我使用一個簡化版本的這裏以登錄表單爲例。

我們將盡快改進插件以簡化此覆蓋。

+0

我們剛剛更新了文檔https: //github.com/CakeDC/users/blob/master/Docs/Documentation/Configuration.md#using-the-users-email-to-login指出其他人在相同的情況下 – steinkel

相關問題