pavki/hr_qa_sbs_best_bad huggingface dataset:
Вопрос: Какие облачные сервера посоветуете?

Лучший ответ: Чтобы упаковать сайт в контейнер, и легко масштабировать докупая мощности
А не получится.
Если архитектура вашего сайта на это не рассчитана.
Подробнее:Есть вертикальное масштабированиеИ горизонтальное масштабирование
Вертикальное - это очень просто.
Этап 1. Простой хостинг VPS/VDS. 
Меняем тариф на больший - и вуаля - отмасштабировалось.
Как нетрудно догадаться это процесс не вечный. Но простой да.Тут годится любой хостинг VPS/VDS. Они все это умеют.
Есть нюансы:
1) Иногда требуется перезагрузка, чтобы подействовали новые лимиты.
2) Чаще всего требуется перераспределить пространство на диске вручную, иначе вновь выделенное будет недоступно, но это несложно.
Рекомендую ruweb.net
Там на VPS используется виртуализация KVM
между предыдущим и последующим этапами понадобится переезд
Следующий этап, когда перестало хватать VPS.
"Железный" выделенный сервер. Т.н. хостинг типа dedicated.
Рекомендую OVH, Hetzner
Но на этом простое масштабирование заканчивается.
Понадобится на dedicated более мощное железо - придется переезжать.
В обоих случаях - VPS/dedicated - контейнеры не при чем. 
Они тут параллельны.
Просто их зачастую применяют как вспомогательный элемент, в системах рассчитанных на масштабирование. Да и только.
Контейнеры для масштабирования не обязательны: Всегда ли нужны Docker, микросервисы и реактивное ...
В этой статье помимо прочего рассказывается и о тех технологиях, что используются для масштабирования и главное зачем они используются.
Горизонтальное масштабирование:
Вот его возможности почти безграничны.
Но есть очень важный нюанс - тут вам нужно будет специальным образом написать свой сайт, чтобы он умел это делать.
Для тренировки в горизонтальном масштабировании рекомендую хостинги Heroku, Google AppEngine.
Но они потребуют чтобы ваш сайт был сделан вполне определенным образом.
Для начала читать это: Приложение 12-ти факторов
Затем что такое сервер очередей (MQ server).
И пр. и т.д. и т.п.

Худший ответ: То есть Azure и AWS вот так сходу вам не пришли в голову?)
Вопрос: Как пробросить контейнер с mysql к контейнеру с веб сервером?

Лучший ответ: Вот у вас же написано в описании сервиса web
  links:
    - db
####
Более правильно и наглядно было написать
  links:
    - db:db
)
####
это значит кто контейнер сервиса "db"  для сервиса "web" будет доступен по адресу db
localhost внутри контейнера укажет на сам этот контейнер, айпи хоста на сам хост. Конечно по айпи хоста можно добраться до базы, поскольку проброшен порт (что и делает ваш mysql workbench), но видимо докер добавляет это правило iptables только для внешних сетей.

Худший ответ: посмотрите на каком айпи крутится контейнер за базой, docker inspect
в настройках php приложения укажите этот ip
например у меня с тремя контейнерами nginx+php-fpm+postgres  , база имеет айпи 172.17.0.3 , его и указываю.
контейнеры общаются с друг другом по внутренней сетке своей, а вы пытаетесь из контейнера подключится к другому с внешней стороны, надеюсь понятно объяснил.
Вопрос: Как устранить проблемы с работой denwer?

Лучший ответ: Перейти на OpenServer и не мучить бедный денвер.

Худший ответ: просто надо было чекнуть брандмауэр
Вопрос: Как при наведении на картинку сделать эффект затемнения?

Лучший ответ: Стандартно же, на любом сайте можно посмотреть реализацию.
Обертка или ссылка, внутри изображение:<a href="#" class="img__link"> <img src="path" /></a>
дальше используются псевдоэлементы:a { display: block; position: relative; }

a:after { content: ''; position: absolute; top: 0; left: 0; right: 0; bottom: 0; background: rgba(0,0,0,.5);  opacity: 0; }

a:before { content: ''; position: absolute; top: 0; left: 0; right: 0; bottom: 0; background: url(icon-path); opacity: 0; }

a:hover:before,
a:hover:after { opacity: 1; }
Второй вариант (больше подходит если вн. есть еще и текст описание):<a href="#" class="img__link"> 
  <img src="path" />
  <span class="img__mask"><i class="img__icon"></i></span>
</a>
Стили примерно те же:a { display: block; position: relative; }

.mask { position: absolute; top: 0; left: 0; right: 0; bottom: 0; background: rgba(0,0,0,.5);  opacity: 0; }

a:hover:after {
  opacity: 1;
}

Худший ответ: вешать hover на обертку img, при наведении иконку делать visibility: visible..img_wrapper:hover {
  ...
  background: rgba(0,0,0,0.5) //прозрачность сами выставите
}

img_wrapper:hover .icon {
 visibility: visible
}
как то так
Вопрос: С чего начать изучение Linux (в целях освоения Kali Linux)?

Лучший ответ: Понять, с какой сборки стоит начать 
Сходите на distrowatch.com - там есть рейтинг популярных дистрибутивов (и не бойтесь брать ubuntu - ей не только домохозяйки пользуются).Научиться взаимодействовать с консолью (основные команды и пр.)Скотт Граннеман - Необходимый код и командыАлексей Береснев - Администрирование GNU/Linux с нуля
Тут главное практика, не стоит пытаться запомнить сразу все - со временем все, что нужно, само запомнится.Получить понимание основ (что из себя представляет файловая система и пр.)
Гуглите книги для системных администраторов - на тостере уже не раз спрашивали. Все они более-менее про одно и то же, так что берите какая больше понравится. В процессе чтения будет очень не лишним попробовать понастраивать разное серверное по и посмотреть что оно из себя представляет - есть документация для ubuntu server на русском.с английским не дружу, но никогда не поздно начать
Самое время начать, поскольку к моменту, когда вы поймете основы и захотите чего-то большего, окажется, что очень многие интересные книжки по теме тестирования на проникновение (в частности от packt publishing) будут только на английском.

Худший ответ: Начните с теории.
Как c основ Linux, так и  с принципов функционирования ПО и сетей.
Вопрос: Как правильней сверстать данные вертикальные полоски?

Лучший ответ: можно гуглить по "CSS timeline"
первая ссылка https://freefrontend.com/css-timelines/
и примеры и код

Худший ответ: Просто у каждого элемента бордер слева или справа
Вопрос: Как сверстать «кропалку»?

Лучший ответ: Выше пример, открой инструменты разработчика и разбери по кусочкам, что и как там. Там одна фоновая картинка, вторая внутри рамки, фоновая затеняется, в рамке нет. Так достигается эффект. При перемещении рамки, внутри перемещается картинка в обратном направлении, тем самым она остается неподвижной.

Худший ответ: Кропалко
UPD. Тогда вот так:background-color: transparent;
box-shadow: 0 0 0 1000px rgba(0,0,0,.6);
Вопрос: Так где же все-таки настраивать: nginx.conf, conf.d, sites-available или sites-enabled?

Лучший ответ: Как верно пояснил выше Алексей - так и делают обычно, чуть-чуть дополню (расширю его пояснения):
1. nginx.conf - общие конфиги всего сервера и всех обслуживаемых сайтов под ним, там он заодно подключает всё, что лежит в site-enabled
2. site-available - конфиги отдельных приложений, туда можно заткнуть один для вебдава, другой для вебсокетов, третий для сайта, четвёртый для другого сайта, а пятый вообще для php-fpm и т.д.
3. sites-enabled - т.к. тут просто включённые сайты - сюда складываются симлинки из site-available, для того, чтобы быстро включить, переключить или отключить какой-то конфиг. Что-то вроде горячей замены.
По-хорошему делается всё именно так.

Худший ответ: У меня так:nginx.conf - основной конфиг. Указываем настройки ssl, gzip и прочего, что одинаково для всех хостов.sites-available - конфиги хостов со своими настройкамиsites-enabled - ссылки на конфиги из sites-available
Вопрос: Будет ли работать внешний монитор на ноутбуке с поврежденным видеоускорителем?

Лучший ответ: Скорее нет, чем да.
Если проблема именно в повреждении видеоконтроллера.
А не шлейфа до встроенного экрана.
Но мне кажется, это проверить проще простого.
Ноутбук же переносной.
У вас разве нет друзей с мониторами.
Да и телевизоры многие современные умеют подключаться к компьютеру.
Описанные проблемы - это проблемы с драйвером.
А не непосредственно с видеоадаптером.
И еще одно соображение - современные ноутбуки как правило имеют 2 видеоконтроллера: процессорный внутренний и дискретный отдельный второй.

Худший ответ: Приобрел в магазине новый монитор, подключил -- работает) Правда, без драйверов просто в HD, все в точности как и со встроенным
Вопрос: Что должен знать/уметь senior backend developer?

Лучший ответ: Как я вижу это со своей позиции джуниора:
Навскидку:
1) Подробная экспертиза технологий, относящихся к предметной области проекта и его целевых платформ. Ведь senior не только должен круто разрабатывать на тех или иных технологиях - он, собственно, и определяет, какие технологии будут использоваться на проекте с учетом многих факторов.
2) Полное снятие технологических рисков. Это, в общем, вытекает из первого. Senior всегда может предвидеть возможные проблемы еще до начала разработки проекта и подробно донести это в доходчивой форме заказчику/руководству.
3) Умение эффективно ставить задачи разработчикам своей команды. По сути, умение руководить.
4) Умение эффективно делиться богатым опытом с членами своего коллектива. То есть быть мудрым и чутким наставником для младших коллег.
Думается, настоящие senior-разработчики идут от 10-12 лет опыта работы.

Худший ответ: Вот была статья на хабре про план развития, он конечно упрощен, но с определенной точкой допущений сделает из тебя мидла. Так вот сеньйор это мидл который стал управленцем. Поэтому все знания мидла + управления людьми, бизнесом и тд. Должен начинать понимать как всем этим рулить и как общаться с программистами непосредственно. Следующий уровень(во многих кампаниях де факто или де юре это он и есть) - CTO.
Вопрос: Как осуществляется шифрование телеграм?

Лучший ответ: 1. Алгоритмов не тысячи. Но вот количество вариантов ключей - неисчислимо.
Телеграм использует симметричное 256-битное шифрование AES и шифрование RSA 2048. Обмен ключей идет по методу Диффи-Хеллмана. Также почитайте технический FAQ 
2. Шифруются не все сообщения и чаты, а только в том случае, если вы создаете секретный чат.
3. Почитайте банально википедию - что такое открытый ключ.
Вкратце.
1. Вася создает пару ключей. Один длиннее (приватный), другой короче (публичный). Одним можно зашифровать, другим расшифровать.
2. Вася передает Ане публичный ключ
3. Аня шифрует им сообщение и передает Васе
4. Вася расшифровывает.
При этом все могут перехватить и видеть публичный ключ Васи, но без приватного ключа расшифровать сообщение Ани не смогут.
Аня, в своем первом сообщении может передать свой публичный ключ, чтобы Вася мог им шифровать сообщения, которые сможет расшифровать только Аня.
В идеале, временная пара ключей может генериться отдельно для каждого чата/сессии - так работает https.
P.S. Полезные ссылки:
https://medium.com/@tglive/stop-reading-gizmodo-7f...

Худший ответ: https://ru.wikipedia.org/wiki/Криптосистема_с_откр...
Вопрос: Бесполезный User Generated Content: нужен ли?

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

Худший ответ: в любом случае это обновление контента, что для сео плюс.
если контент не приносит вреда в плане позиционирования и тд - лишним не будет
но вообще, если люди на вашем ресурсе пишут про что-то, что на 90% не отвечает вашим запросам, то у вас явно проблема с тематикой какая-то. дайте конкретику, поговорим
Вопрос: Где можно найти материалы по ORM Django?

Лучший ответ: Все же в документации Django не так много моментов насчет этого. 
Ты точно документацию читал?
Здесь:
https://docs.djangoproject.com/en/1.10/ref/models/...
https://docs.djangoproject.com/en/1.10/topics/db/o...
https://docs.djangoproject.com/es/1.10/ref/models/...
https://docs.djangoproject.com/es/1.10/ref/models/...
написано столько, сколько нигде больше не встретишь.

Худший ответ: https://docs.djangoproject.com/en/1.10/ref/contrib...
Но специфические индексы джанго вроде бы так и не умеет.
Вопрос: Как изменить иконку типов файлов в Windows?

Лучший ответ: www.nirsoft.net/utils/file_types_manager.html помог

Худший ответ: Штатными средствами - никак, только правкой реестра.
Можно воспользоваться сторонними утилитами, например, этой:
defaultprogramseditor.com (как вам рекомендовал Константин Цветков)
Вопрос: Как неопределенное поведение в javascript складывается на уровне V8?

Лучший ответ: однако неопределенные поведения мы либо обрабатывали исключениями, либо как-то логично обрабатывали входные параметры операндов (obj1 + obj2). А как же тут обрабатывается?
А вот не поверите, есть два вида программистов: те, которые считают, что хорошо замалчивать ошибки, и те, кто УЖЕ так больше не считает. Есть даже статьи на Хабре, которые рассказывают, какой JS хороший и "надежный". Считать замалчивание ошибок надежностью - имхо это значит не стать (пока что) программистом. От ошибок можно уметь восстанавливаться, но замалчивать их нельзя.
В качестве примера посмотрите на архитектурные подходы в Эрланге. Прям погуглите по словам "erlang let it crash". Этот подход, поддерживаемый концепцией процесса в Эрланге, говорит, что тот код, который не может дальше нормально выполняться, должен "упасть". А мы напишем другой код, который будет следить за работой основного, и в случае нештатных ситуаций будет предпринимать необходимые действия (например, перезапускать процесс).
Да хотя что далеко ходить, концепция исключений в более популярных языках также есть способ научиться жить с ошибками, не бояться их генерировать, и уметь их обрабатывать там, где это возможно и удобно. Это первое.
Второе: JS это язык со слабой типизацией. Это такая штука, которая позволяет написать 1 + "1" и безо всяких перегрузок в стиле C++ транслятор сам приведёт какой-то из аргументов к такому типу, чтобы операцию можно было выполнить. Вы сейчас просто в большом удивлении от того, что это возможно и кому-то такое могло прийти в голову (вы из плюсов пришли, да?). Кстати, в PHP почти то же самое. Только правила преобразований другие немного. (Кстати, почитайте об операторах == и === в JS, узнаете много удивительного, если еще не сталкивались).Ведь браузерные движки написаны на С++, а значит все это JS-дело определено на уровне С++, мне интересно какие внутренности определяют такое поведение.
Никакие внутренности не определяют это поведение. Все эти случаи либо явно описаны в стандарте JS и их просто реализуют в соответствии со стандартом, либо реализуют так, чтобы реализации были максимально совместимыми. Тут можете почитать про typeof null, возвращающий "object" - по сути один большой баг, который теперь поддерживают, чтобы не сломать совместимость.
Из-за этих мелочей в JS минимум системности и логичности. Этим языком правит совместимость, а не логика. Почему он такой, какой есть, вам уже ответили.

Худший ответ: NaNNaNNaNNaNNaN Batman!
Если серьёзно, то это неявные приведения типов операндов. Вот отличное объяснение.
Вопрос: Ремонтная мастерская дома. Что для этого требуется знать и иметь?

Лучший ответ: В первую очередь приобретите монтажное и демонтажное паяльное оборудование с учетом особенностей плат прменяемых в компьютерах, оловоотсос не дает нужного эффекта так как припой полностью заполняет металлизированные пистоны (отверстие), к тому же плата многослойная что обеспечивает хороший теплоотвод, а припой бессвинцовый тугоплавкий, вам понадобится паяльник достаточно мощный электрически и эффективный термодинамически, лучше паяльная станция со стабилизацией температуры, а если совсем бюджетно то лучше взять ЭПСН с жалом из меди чем "китайца" с жалом из стали, во-вторых необходим термовоздушный фен, желателен ИК-стол предварительного нагрева, и используется бесконтактный демонтаж не только для BGA и прочих SMD, но и для элементов сквозного монтажа, в-третьих желательно иметь осциллограф и хорошие мультиметры, в-четвертых сделать себе разные "приблуды" типа диагностических стендов с разными напряжениями и разъемами для прозвонки, в-пятых необходимо набраться опыта работы именно с такими платами (легкоплавкие сплавы, медная оплетка, флюсы), знания с Ютуба черпайте, в том числе и о реальных неисправностях.

Худший ответ: Нормальное паяло, осцилл, мультиметр. БП лабораторный, оптика. В процессе разберетесь что еще :-)
Вопрос: Как безопасно загружать данные от ckeditor?

Лучший ответ: В ckeditor есть настраиваемые фильтры
docs.ckeditor.com/#!/api/CKEDITOR.htmlDataProcessor
На сервере тоже нужно фильтровать, т.к. фильтр в браузере легко обходится.
Что-то вроде htmlpurifier, например

Худший ответ: Как безопасно загружать данные от ckeditor?
Всегда фильтровать любую запись в БД, не разрешать  никакой код.
Вопрос: Как инсертить значения с точкой или запятой в ASP.NET Core 2.0?

Лучший ответ: То, что Вы отметили поле как [Required], означает только то, что это поле должно быть обязательно заполнено. Однако, логику проверки Вы не указывали. А виноваты Microsoft...

Худший ответ: AleXr64 на GitHub предложил добавить [RegularExpression(@"^\d+.?\d{0,2}$", ErrorMessage = "Invalid Target Price; Maximum Two Decimal Points.")]
Может быть кому-то и интересно, но этот вариант тоже не помог.
Вопрос: Почему не может найти метод?

Лучший ответ: Потому что эти методы работают через магию.
Ставите barryvdh/laravel-ide-helper, обращаете внимание на раздел «Automatic phpDocs generation for Laravel Fluent methods» в доке пакета, радуетесь жизни.
P.S. Тех, кто вставляет код скриншотами, в аду ждёт отдельный котёл.

Худший ответ: Потому что эти методы работают через магию.
Ставите barryvdh/laravel-ide-helper, обращаете внимание на раздел «Automatic phpDocs generation for Laravel Fluent methods» в доке пакета, радуетесь жизни.
P.S. Тех, кто вставляет код скриншотами, в аду ждёт отдельный котёл.
Вопрос: Пожалуйста, объясните новичку, что лучше: статическая типизация или динамическая?

Лучший ответ: Это влияет на наличие логических ошибок в проекте. С динамической типизацией очень просто "наделать делов" а потом баг в продакшене.
Cтатика на этапе компиляции покажет ошибку и не дас скомпилировать/выложить в продакшен.
Да, немного больше кода писать, но это того стоит ;)

Худший ответ: Для меня лично статическая типизация лучше! Если ты разбираешься с новой библиотекой/фреймворком, то со статической типизацией проще, т.к ты видишь, что надо передать в метод и что он возвращает(на уровне типов). Динамика, увы, таким похвастаться не сможет.
Ну и разумеется, у статических языков Intelisense(помощь при написании кода) работает лучше, чем у динамических. Сравните Шарп и питон к примеру.
Вопрос: Почему мой сайт редиректит на порно?

Лучший ответ: у вас на сайте вирус  
или испльзуется уязвимость в самой СМС , но по сути одно и то-же 
1. Найдите все вирусы https://www.revisium.com/ai/  - кнопочка для сайтов.
2. Запускаете сканер или с консоли ( с нее явно лучше ) или   в браузере ( часов 10 займет)
3. Удаляете вирсы ( не все что он найдет подозритеьного а только то что реально к вам отношения не имеет.) порой это эксплойты в сотнях а то и тысячах файлах, а бывает и десятки тысяч своих файлов.
Бывает 1 файл. тут как пойдет .
После этого уже приводите в порядок .htaccess ну и ждете новой индексации.
4. используйте nazamok.com
5. Настраиваете систему бэкапирования. 
6.  по возможности в зависимости от вируса, можно найти способ его проникновения, желательно удалить этот способ.
Ну и да конечно желательно обновить движок сайта по максиму ( только после полного бэкапа!)

Худший ответ: проверяйте все файлы сайта, а не только .htaccess
как минимум, ставьте изменения файлов на сайте под постоянный контроль
Вопрос: Есть ли плагин для якобы «живого ввода»?

Лучший ответ: typed.js
Оно?

Худший ответ: Как вариант на чистом css https://jsfiddle.net/Politonius/cs75Lfr7/
Вопрос: Как создать отслеживание загрузки аудио?

Лучший ответ: в книге Фленагана:

Худший ответ: Скорее событие loadeddata, progress - для отслеживания текущего положения проигрывания.
Вопрос: Как сделать скрипт для проверки, что включен Caps Lock и включена русская раскладка?

Лучший ответ: С капс локом просто, в принципе: MDN.
С языком сложнее, если нужно только на русский проверять, то можно так. Если языков много, то можно использовать Google Translation API. 
Если что, ответ взят по сути отсюда.
UPD: вот еще кривой вариант вместе с проверкой на капс

Худший ответ: Следует забИть на детект как капса так и ленга текста... 
Предложенными схемами еще с горем по полам то с капсом может и прокатит вот только не с ленгом. Кто сказал, что кирилица может быть только в ru или латиница только в en? С таким подходом, то лучше уже по ленгу браузера пытаться разруливать или вообще повесить регулярку на ввод, которая будет фильтровать ввод и добавить кнопку отображения пароля через смену типа (т.к. на сколько понял, в этом и суть...)
Вопрос: Хакинтош как вторая система или виртуалка?

Лучший ответ: VirtualBox лучше не использовать, скачайте бесплатный  VMware Workstation Player и готовый контейнер с OS X

Худший ответ: Ставьте в виртуалку, хакинтош это штука которая неизвестно как поведет себя на вашем железе.
Но а так это не вопрос вообще, тут вам решать и что лучше уж точно никто не скажет - неизвестны задачи и ещё 100500 переменных.
Вопрос: Как проверить, изменилось ли поле в сущности?

Лучший ответ: Событие preUpdate как раз таки сработает, если в сущности изменено хоть одно поле, не важно какое. Но если хотите узнать, изменилось ли конкретное поле, тогда в том же событии preUpdate можно сделать так:$unitOfWork = $entityManager->getUnitOfWork();
$unitOfWork->computeChangeSets();

$changesets = $unitOfWork->getEntityChangeSet($article);
$changesets это ассоциативный массив, где ключ - имя поля, а значение массив с двумя элементами:
0 - до, 1 - после изменения. 
Другими словами, факт существования ключа $changesets['content'] говорит о том, что это поле было изменено.

Худший ответ: В целом, выше ответили. От себя хочу добавить свой кусок кода, который у меня используется:namespace AppBundle\Entity;

use DateTime;
use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\HasLifecycleCallbacks
 */
abstract class EntityBase
{

    /**
     * @var int
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;

    /**
     * @var DateTime
     *
     * @ORM\Column(name="created_at", type="datetime")
     */
    protected $createdAt;

    /**
     * @var DateTime
     * @ORM\Column(name="updated_at", type="datetime")
     */
    protected $updatedAt;

    /**
     * Get id
     *
     * @return int
     */
    public function getId()
    {
        return $this->id;
    }

    /**
     * 
     * @return \DateTime
     */
    public function getCreatedAt()
    {
        return $this->createdAt;
    }

    /**
     * 
     * @return \DateTime
     */
    public function getUpdatedAt()
    {
        return $this->updatedAt;
    }

    public function setId($id)
    {
        $this->id = $id;
    }

    public function setCreatedAt($createdAt)
    {
        $this->createdAt = $createdAt;
    }

    public function setUpdatedAt($updatedAt)
    {
        $this->updatedAt = $updatedAt;
    }

    /**
     *
     * @ORM\PrePersist
     * @ORM\PreUpdate
     */
    public function updatedTimestamps()
    {
        $this->setUpdatedAt(new DateTime('now'));

        if ($this->getCreatedAt() == null) {
            $this->setCreatedAt(new DateTime('now'));
        }
    }
}
Вопрос: Как решить проблему задвоения аккаунтов при регистрации и входе через соц. сети?

Лучший ответ: Если регистрация с email адресом, то по возможности вытаскивать email из соц сетей и автоматически привязывать у пользователя эту соц сеть. Если соц сеть не дает email, то при первом входе насильно требовать завершения регистрации через указания email, далее проверяется есть ли этот пользователь уже в базе - тогда говорим нужно авторизоваться и после логина привязываем соц сеть, если такого email нет, то регистрируем нового пользователя с записью этого email в качестве основного + привязка соц сети + пароль(уже по желанию).

Худший ответ: Александр Талалаев написал правильно. Но если email не обнаружен, предлагаете объединить аккаунты, если они уже есть на сайте. А дальше уже ваши внутренние алгоритмы и кухня.