Improved login: now you can login using name or email

Close #873
This commit is contained in:
corpsee 2015-03-17 15:11:05 +06:00 committed by Tobias van Beek
parent c0568d3a4b
commit 1b7f0bbb4b
13 changed files with 69 additions and 3 deletions

View file

@ -49,7 +49,7 @@ class SessionController extends \PHPCI\Controller
} else {
unset($_SESSION['login_token']);
$user = $this->userStore->getByEmail($this->getParam('email'));
$user = $this->userStore->getByLoginOrEmail($this->getParam('email'));
if ($user && password_verify($this->getParam('password', ''), $user->getHash())) {
session_regenerate_id(true);
@ -68,7 +68,7 @@ class SessionController extends \PHPCI\Controller
$form->setAction(PHPCI_URL.'session/login');
$email = new b8\Form\Element\Email('email');
$email->setLabel(Lang::get('email_address'));
$email->setLabel(Lang::get('login'));
$email->setRequired(true);
$email->setContainerClass('form-group');
$email->setClass('form-control');

View file

@ -39,6 +39,7 @@ PHPCI',
'reset_email_title' => 'PHPCI Adgangskode-nulstilling for %s',
'reset_invalid' => 'Ugyldig anmodning om adgangskode-nulstilling.',
'email_address' => 'Email-addresse',
'login' => 'Login / Email Address',
'password' => 'Adgangskode',
'log_in' => 'Log ind',

View file

@ -39,6 +39,7 @@ PHPCI',
'reset_email_title' => 'PHPCI Passwort zurücksetzen für %s',
'reset_invalid' => 'Fehlerhafte Anfrage für das Zurücksetzen eines Passwortes',
'email_address' => 'Emailadresse',
'login' => 'Login / Email Address',
'password' => 'Passwort',
'log_in' => 'Einloggen',

View file

@ -39,6 +39,7 @@ PHPCI',
'reset_email_title' => 'PHPCI Επαναφορά Κωδικού για %s',
'reset_invalid' => 'Μη έγκυρο αίτημα επαναφοράς κωδικού πρόσβασης.',
'email_address' => 'Διεύθυνση email',
'login' => 'Login / Email Address',
'password' => 'Κωδικός πρόσβασης',
'log_in' => 'Είσοδος',

View file

@ -39,6 +39,7 @@ PHPCI',
'reset_email_title' => 'PHPCI Password Reset for %s',
'reset_invalid' => 'Invalid password reset request.',
'email_address' => 'Email Address',
'login' => 'Login / Email Address',
'password' => 'Password',
'log_in' => 'Log in',

View file

@ -39,6 +39,7 @@ PHPCI',
'reset_email_title' => 'Réinitialisation du mot de passe PHPCI pour %s',
'reset_invalid' => 'Requête de réinitialisation de mot de passe invalide.',
'email_address' => 'Adresse email',
'login' => 'Login / Email Address',
'password' => 'Mot de passe',
'log_in' => 'Connexion',

View file

@ -39,6 +39,7 @@ PHPCI',
'reset_email_title' => 'Ripristino della password di PHPCI per %s',
'reset_invalid' => 'Richeista di ripristino password non valida.',
'email_address' => 'Indirizzo Email',
'login' => 'Login / Email Address',
'password' => 'Password',
'log_in' => 'Accedi',

View file

@ -39,6 +39,7 @@ PHPCI',
'reset_email_title' => 'PHPCI wachtwoord reset voor %s',
'reset_invalid' => 'Ongeldig wachtwoord reset verzoek',
'email_address' => 'E-mailadres',
'login' => 'Login / Email Address',
'password' => 'Wachtwoord',
'log_in' => 'Log in',

View file

@ -39,6 +39,7 @@ PHPCI',
'reset_email_title' => 'Reset Hasła PHPCI dla %s',
'reset_invalid' => 'Prośba o zmianę hasła jest nieważna.',
'email_address' => 'Adres email',
'login' => 'Login / Email Address',
'password' => 'Hasło',
'log_in' => 'Zaloguj się',

View file

@ -38,6 +38,7 @@ PHPCI',
'reset_email_title' => 'Сброс пароля PHPCI для %s',
'reset_invalid' => 'Некорректный запрос на сброс пароля.',
'email_address' => 'Email',
'login' => 'Логин / Email',
'password' => 'Пароль',
'log_in' => 'Войти',

View file

@ -39,6 +39,7 @@ PHPCI',
'reset_email_title' => 'Скидання пароль PHPCI для %s',
'reset_invalid' => 'Невірний запит скидання паролю.',
'email_address' => 'Email адреса',
'login' => 'Логин / Email адреса',
'password' => 'Пароль',
'log_in' => 'Увійти',

View file

@ -0,0 +1,30 @@
<?php
use Phinx\Migration\AbstractMigration;
class UniqueEmailAndNameUserFields extends AbstractMigration
{
/**
* Migrate Up.
*/
public function up()
{
$user_table = $this->table('user');
$user_table
->addIndex('email', array('unique' => true))
->addIndex('name', array('unique' => true))
->save();
}
/**
* Migrate Down.
*/
public function down()
{
$user_table = $this->table('user');
$user_table
->removeIndex('email', array('unique' => true))
->removeIndex('name', array('unique' => true))
->save();
}
}

View file

@ -59,7 +59,7 @@ class UserStoreBase extends Store
/**
* Returns a User model by Email.
* @param mixed $value
* @param string $value
* @param string $useConnection
* @throws HttpException
* @return \@appNamespace\Model\User|null
@ -82,4 +82,30 @@ class UserStoreBase extends Store
return null;
}
/**
* Returns a User model by Email.
* @param string $value
* @param string $useConnection
* @throws HttpException
* @return \@appNamespace\Model\User|null
*/
public function getByLoginOrEmail($value, $useConnection = 'read')
{
if (is_null($value)) {
throw new HttpException('Value passed to ' . __FUNCTION__ . ' cannot be null.');
}
$query = 'SELECT * FROM `user` WHERE `name` = :value OR `email` = :value LIMIT 1';
$stmt = Database::getConnection($useConnection)->prepare($query);
$stmt->bindValue(':value', $value);
if ($stmt->execute()) {
if ($data = $stmt->fetch(\PDO::FETCH_ASSOC)) {
return new User($data);
}
}
return null;
}
}