Войти с именем пользователя или электронной почтой - MySQL - PullRequest
0 голосов
/ 21 февраля 2011

Я планирую разрешить пользователям входить по электронной почте или по имени пользователя, но мне интересно, как это сделать правильно в MySQL.

В настоящее время я проверяю поля имени пользователя и электронной почты (PHP), чтобы убедиться, что их еще нет в БД. Эти запросы выполняются до фактического запроса вставки, который будет добавлять пользователя. Я полагаю, что добавления уникального индекса достаточно для системы, которая входит в систему с одним идентификатором - но что в этом случае, когда уникальность требуется для двух полей? Достаточно ли добавления уникального индекса для каждого столбца?

Кроме того, есть ли проблемы, с которыми я мог бы столкнуться при использовании этого метода?

Спасибо заранее.

Ответы [ 3 ]

2 голосов
/ 21 февраля 2011

Я бы не стал полагаться на индекс - лучше сначала выполнить поиск в базе данных по каждому из двух значений. Также стоит добавить уникальный индекс, но никогда не стоит полагаться на то, что он ловит эти события.

На сайте, где я делаю то же самое с логинами, если у имени пользователя есть символ @, я предполагаю, что это электронная почта, и найдите соответствующее имя пользователя (которое мне нужно, потому что пароли хэшируются с именами пользователей как соль в этой системе) .

0 голосов
/ 21 февраля 2011

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

НЕ полагайтесь на уникальный индекс, чтобы найти ваши дубликаты для вас, это не чистый способ сделать это. ВСЕГДА проверяйте перед вставкой, если значения уже существуют.

Еще один совет, который приходит на ум: если в случае какой-либо ошибки вам необходимо обновить форму, убедитесь, что все заполненные пользователем поля заполнены обратно.

0 голосов
/ 21 февраля 2011

Я делаю это на своем сайте, но я сохранил это относительно просто.Я не допускаю символы @ в именах пользователей.Прежде чем выполнить мой запрос на вход в таблицу пользователей в моей функции, я использую php, чтобы определить, есть ли @ в поле имени пользователя.Если это так, я обусловливаю запрос (с помощью переменной для имени поля), чтобы проверить имя пользователя по полю электронной почты в пользовательской таблице.

Вероятно, есть способ сделать это напрямую в MySql, но для меня это решение быстрое, простое в программировании и работает 100% времени.

...