Фон
Gmail разрешает фильтры '. И +, позволяющие бесконечному количеству адресов электронной почты указывать на одну и ту же учетную запись Gmail.
, т. Е. Все перечисленные ниже указывают ната же учетная запись gmail:
- user@gmail.com
- u.ser@gmail.com
- user+spam@gmail.com
- u.ser+spam@gmail.com
Проблема
В нашей производственной среде есть таблица, в которой хранятся все данные зарегистрированных пользователей, включая их адреса электронной почты.
В настоящее время адреса электронной почты gmail в этой таблице содержат сочетание указанных выше вариантов.
- Проблема 1 - Если пользователь пытается войти в систему после того, как онсоздали свою учетную запись, используя другой вариант своего адреса электронной почты, чем у нас на записи, этот пользователь не будет найден.
- Задача 2 - Пользователь может создавать различные учетные записи на нашем сайте, используя различные варианты адресов электронной почты Gmail.
Возможные решения:
Одним из предложенных решений было бы создание функции ...
CREATE FUNCTION STANDARDIZE_EMAIL (
@Email varchar(255)
)
RETURNS varchar(255)
AS
BEGIN
-- we make the email lowercase since email addresses are
-- case independent
SET @Email = LOWER(@Email)
-- if it is a gmail email address then we remove periods and filters from the username
IF RIGHT(RTRIM(@Email), 10) = '@gmail.com'
BEGIN
-- remove domain
SET @Email = REPLACE(@Email, '@gmail.com', '')
--remove periods from username
SET @Email = REPLACE(@Email, '.', '')
-- remove '+' and filter
IF CHARINDEX('+', @Email) > 0
SET @Email = SUBSTRING(@Email, 0, CHARINDEX('+', @Email))
-- add back the domain
SET @Email = @Email + '@gmail.com'
END
RETURN (@Email)
END
Пример использования:
SELECT * FROM table
WHERE STANDARDIZE_EMAIL(Email) = STANDARDIZE_EMAIL(@Email)
inb4: Запуск процесса для стандартизации всех электронных писем, находящихся в настоящее время на столе, не является вариантом, так как могут быть дубликаты, и пользователи потеряют функциональность фильтра gmail +
Стандартизирует электронную почтуадрес в каждой записи, когда мы ищем слишком дорогой в БД?
Другое предлагаемое решение - добавить поле GmailEmail в таблицу и при первой регистрации пользователя сохранить копиюстандартизированная версия его адреса электронной почты gmail для этого второго поля, которая может использоваться для сравнений при повторном входе в систему.
Я бы не стал заходить в такой степени, если это возможно.
У кого-нибудь естьесть идеи?Я приветствую любой вклад.