Дизайн входа с несколькими учетными записями

Java

Сейчас почти большинствоAppОба поддерживают использование нескольких сторонних учетных записей для входа в систему, таких как: WeChat,QQ, Weibo и т. д., мы называем это единым входом в систему с несколькими учетными записями. Дизайн таблицы и дизайн процесса этих счетов очень важны, иначе последующее расширение будет плохим. В этой статье не приводятся какие-либо практики кода, но чтобы отсортировать блоггеров на основе дизайна нашего модуля учетной записи, предоставьте идеи только для справки.

1. Самостоятельная система входа в систему

1.1 Вход и регистрация по номеру мобильного телефона

Идея этого дизайна в том, что каждый номер мобильного телефона соответствует пользователю, а номер мобильного телефона является обязательным элементом.

Процесс:

  1. Сначала введите номер мобильного телефона, а затем отправьте его на сервер. Сначала определите, есть ли у номера мобильного телефона учетная запись. Если нет, будет сгенерирован случайный код подтверждения, и номер мобильного телефона и код подтверждения будут привязаны кRedis, и установите определенное время истечения срока действия (время истечения обычно составляет 5 минут, что является сроком действия нашего общего кода подтверждения мобильного телефона), и, наконец, отправьте код подтверждения пользователю через SMS.
  2. После получения кода подтверждения пользователь заполняет основную информацию, такую ​​как код подтверждения и пароль, в интерфейсе, а затем отправляет эти данные на сервер. После того, как сервер получает его, он сначала оцениваетRedisЯвляется ли проверочный код, соответствующий номеру мобильного телефона, тем же самым, в случае неудачи он вернет код ошибки.Если это удастся, он создаст учетную запись и сохранит пароль для пользователя.
  3. После успешной регистрации пользователи могут手机号+密码чтобы залогиниться.

проблема:

  1. Пользовательский интерфейс плохой, вам необходимо завершить получение кода подтверждения, ввести код подтверждения/пароль/имя пользователя и много другой информации для завершения регистрации, а затем вы можете использовать его;
  2. Забыть пароль легко, после того, как вы его забыли, вы можете сбросить пароль, только забыв пароль.

1.2 Оптимизация регистрации и входа

Идея схемы заключается в том, чтобы ослабить обязательный характер пароля, то есть независимо от того, зарегистрировался пользователь или нет,手机号 + 验证码Войти напрямую (зарезервировано手机号 + 密码способ входа).

Процесс:

  1. Введите номер телефона и отправьте его на сервер. Сервер генерирует случайный проверочный код и привязывает номер мобильного телефона и проверочный код кRedis, и установите определенное время истечения срока действия (время истечения обычно составляет 5 минут, что является сроком действия нашего общего кода подтверждения мобильного телефона), и, наконец, отправьте код подтверждения пользователю через SMS.
  2. После того, как пользователь получит проверочный код, ему нужно только заполнить полученный проверочный код в интерфейсе и отправить его на сервер. После того, как сервер получает его, он сначала оцениваетRedisЯвляется ли проверочный код, соответствующий номеру мобильного телефона в нем, одинаковым, в случае неудачи он вернет код ошибки, а в случае успеха он войдет в систему напрямую. Если это старый пользователь, извлеките информацию о пользователе напрямую; если это новый пользователь, предложите ему улучшить информацию о пользователе (не обязательно).
  3. пользователь через手机号 + 验证码После входа в систему вы также можете установить пароль, а затем пройти手机号 + 密码Способ входа, то есть: пароль не требуется.

Дизайн пользовательской таблицы:

id user_name user_password user_mobile state more
Идентификатор пользователя имя пользователя пользовательский пароль номер мобильного телефона Статус аккаунта другая информация

1.3 Представляем стороннее решение для учетной записи

1.3.1 Вход в Weibo

ВходитьWeb2.0В то время Weibo открыла сторонний веб-сайт для входа в систему. Продукт сказал, что он должен быть у нас, и мы можем войти в нашу учетную запись Weibo, добавив учетную запись Weibo.AppНу, и он должен быть связан с нашей собственной пользовательской таблицей.

Процесс:

  1. Клиент вызывает интерфейс входа в Weibo, чтобы ввести имя пользователя и пароль. После успешного входа он вернетсяaccess_token,пройти черезaccess_tokenВоспроизведениеAPIИнтерфейс получает информацию о пользователе.
  2. Сервер создает учетную запись в нашей пользовательской таблице с помощью информации о пользователе, а позже сторонняя учетная запись может войти непосредственно через учетную запись Weibo.

Дизайн таблицы с информацией о пользователе Weibo:

id user_id uid access_token
идентификатор первичного ключа Идентификатор пользователя уникальный идентификатор Weibo Код авторизации

1.3.2 Кошмар грядет

Незамедлительно после,QQСнова открыть вход пользователя, открыть вход пользователя WeChat, войти пользователя разработки NetEase. . . . . . Если вы хотите получить доступ сразу ко многим сторонним логинам, вы можете только создать новую таблицу в соответствии с «Таблицей информации о пользователе Weibo» и переписать набор сторонних логинов.

2. Оптимизируйте учетную систему

2.1 Анализ исходной системы учетной записи

  1. Самостоятельная система входа в систему: неважно手机号 + 密码, все еще手机号 + 验证码, является своего рода用户信息+密码форма проверки;
  2. Сторонний вход: также用户信息+密码В виде пользовательской информации, которая хранится в сторонней системеID(уникальный идентификатор в сторонней системе), парольaccess_token, это просто пароль, который периодически меняется с датой истечения срока действия.

2.2 Новая система учетных записей

2.2.1 Дизайн таблицы данных

Таблица основных сведений о пользователе:

id nickname avatar more
Идентификатор пользователя Никнейм Аватар другая информация

Таблица информации об авторизации пользователя:

id user_id identity_type identifier credential
идентификатор первичного ключа Идентификатор пользователя Тип входа (номер мобильного телефона/электронная почта) или имя стороннего приложения (WeChat/Weibo и т. д.) Номер мобильного телефона/электронная почта/уникальный идентификатор третьего лица Учетные данные для пароля (сохранение пароля для самостоятельной покупки учетной записи, токен для сохранения третьим лицом)

инструкция:

  1. Пользовательская таблица разделена на用户基础信息表 + 用户授权信息表;
  2. Форма информации о пользователе не сохраняет никаких паролей, не сохраняет никакой информации для входа (например, имя пользователя, номер мобильного телефона, адрес электронной почты), сохраняет только основную информацию, такую ​​как никнеймы и аватары; все, что связано с авторизацией, размещается в информации о пользователе. форма авторизации,Таблица информации о пользователе и таблица авторизации пользователя имеют отношение «один ко многим»..

2.2.2 Процесс входа в систему

  • 手机号 + 验证码

Следуйте предыдущему плану.

  • 邮箱/手机号 + 密码:

Пользователь заполняет邮箱/手机号 + 密码; При запросе на вход сначала определите тип, например, логин по номеру мобильного телефона:

использоватьtype= 'phone'комбинироватьidentifier= '手机号'Найдите, если есть, вынесите и рассудитеpassword_hash(пароль) совпадает с записьюcredentialсоответствует, пройти проверку, если совпадает, то пройтиuser_idПолучить информацию о пользователе;

  • Сторонний логин, например WeChat:

Запросtype= 'weixin'комбинироватьidentifier= '微信 openId', если есть запись, войдите напрямую и обновитеtoken; Предполагая, что связь с сервером WeChat не перехвачена, нет необходимости судить о проблеме с учетными данными.

2.2.3 Преимущества и недостатки

преимущество:

  1. Типы входа бесконечно расширяются, а стоимость разработки новых типов входа значительно снижается;
  2. В исходных условиях приложению необходимо проверить, был ли подтвержден номер мобильного телефона и адрес электронной почты, а также соответствующее поле, напримерphone_verifiedиemail_verified, теперь покаuser_authsдобавить единыйverifiedполе, каждый метод входа может визуально видеть, был ли он проверен;
  3. существуетuser_authsДобавьте соответствующее время иIPадрес, можно более полно отследить привычки использования пользователя, например: он не использовал Weibo для входа более двух лет, а привязан к WeChat 300 дней;
  4. Если вы говорите, что адрес электронной почты и номер мобильного телефона являются частью информации о пользователе, хотя таблица пользователей расширена, в таблице пользователей все еще есть электронная почта и телефон, но они используются только для «целей отображения», и есть нет существенной разницы с такими атрибутами, как никнейм, аватар или пол;
  5. При необходимости можно привязать любое количество методов входа одного типа, то есть пользователь может привязать несколько WeChat, несколько почтовых ящиков и несколько номеров мобильных телефонов. Конечно, вы также можете ограничить метод входа в систему только одной записью;

недостаток :

  1. Если у пользователя есть несколько способов входа в систему, таких как электронная почта, имя пользователя, номер мобильного телефона и т. д., пароль необходимо изменить вместе, иначе он станет邮箱 + 新密码, 手机号 + 旧密码может войти, должно быть очень странная ситуация;
  2. Количество кода увеличилось, а в некоторых случаях увеличилось логическое суждение и возросла сложность; например, вошел ли пользователь в систему или нет, зарегистрировался ли пользователь или нет, щелкните ту же ссылку, чтобы перейти на Weibo после сторонней авторизации и возврата, может возникнуть несколько ситуаций:
    1. Weibo не был зарегистрирован на этом сайте, это очень хорошо, зарегистрируйте его напрямую и войдите в систему;
    2. Weibo уже существует на этом сайте, текущий пользователь не вошел в систему, и прямой вход выполнен успешно;
    3. Учетная запись Weibo не зарегистрирована на этом сайте, но текущий пользователь вошел в систему и связан с другой учетной записью Weibo.Что делать, зависит от того, разрешено ли связывание нескольких учетных записей Weibo;
    4. Weibo не был зарегистрирован на этом сайте, и текущий пользователь вошел в систему, пытаясь выполнить привязку;
    5. Вейбо зарегистрирован, и пользователь авторизовался с этой учетной записью, почему он повторно привязывается;
    6. Этот Weibo уже существует на этом сайте, но текущий пользователь вошел в систему и связан с другой учетной записью Weibo, что мне делать?

3. Вход в один клик

3.1 Предыстория

оглядываться手机号 + 验证码метод входа:

  1. Введите номер мобильного телефона, дождитесь SMS с кодом подтверждения, введите код подтверждения и нажмите Войти. Для завершения всего процесса может потребоваться более 20 секунд, и операция относительно громоздка;
  2. Это зависит от сети обмена текстовыми сообщениями, потому что, если не получать текстовые сообщения, вы не войдете в систему.
  3. С точки зрения безопасности также существует риск утечки проверочного кода. Если кто-то узнает ваш номер телефона и украдет код подтверждения, он также сможет войти в вашу учетную запись.

Но оглядываясь назад, зачем нам капча? Функция кода подтверждения состоит в том, чтобы подтвердить, что номер мобильного телефона принадлежит вам.Кроме использования SMS, есть ли другой способ аутентификации номера мобильного телефона?

  1. Если текущий номер мобильного телефона может быть получен, номер, введенный пользователем, может быть проверен. Однако из соображений безопасности клиент не может получить номер мобильного телефона напрямую, и оператор может получить номер мобильного телефона черезSIMЗапрос данных карты.
  2. Теперь, когда оператор открыл соответствующие возможности, мы теперь можем судить о том, соответствует ли номер мобильного телефона, введенный пользователем, местному номеру, вызывая интерфейс оператора после того, как пользователь вводит номер мобильного телефона. Таким образом, пользователь сохраняет процесс ожидания SMS-сообщения с кодом подтверждения и ввода кода подтверждения и не ограничивается сетью SMS-сообщений, что упрощает процесс входа в систему.
  3. Но если подумать дальше, то если оператор может напрямую вернуть нам текущий номер, а не только для проверки, то пользователю даже не нужно заполнять номер мобильного телефона.

Это главный герой раздела:Вход в один клик.

3.2 Аутентификация по моему номеру телефона

Получите номер карты мобильного телефона, используемой текущим мобильным телефоном, и используйте этот номер для прямого входа в систему в один клик.

Преимущества этого метода входа очевидны. Он может завершить процесс регистрации и входа в систему более удобно и быстро, сократив процесс, который мог занять 20 секунд, примерно до 2 секунд, что значительно улучшает пользовательский опыт входа в систему.

Основные шаги заключаются в следующем:

  1. Инициализация SDK: вызовите метод инициализации SDK и передайте AppKey и AppSecret проекта на платформе.
  2. Вызов страницы авторизации: вызовите SDK, чтобы вызвать интерфейс авторизации. Сначала SDK инициирует запрос оператору на получение маски номера мобильного телефона, после успешного выполнения запроса переходит на страницу авторизации. На странице авторизации отобразится маска номера мобильного телефона и соглашение с оператором, которое пользователь должен подтвердить.
  3. Согласитесь с авторизацией и войдите в систему: пользователь соглашается с соответствующим соглашением, нажимает кнопку входа на странице авторизации, SDK запросит токен для получения этого номера и вернет токен клиенту после успешного запроса.
  4. Получить номер: Отправьте полученный токен на наш собственный сервер, и сервер вызовет интерфейс входа в один клик оператора с токеном, и номер мобильного телефона будет возвращен в случае успешного звонка. Сервер использует номер мобильного телефона для входа или регистрации, возвращает результат операции клиенту и завершает вход в один клик.

В настоящее время Alibaba Cloud предоставляет этот метод и совместим с номерами трех основных операторов.Подробнее см.Облачный SDK Алибаба

4. Резюме

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

Обмен технологиями

  1. Пыль Блог
  2. Блог Пыли - Самородки
  3. Пыль Блог - Блог Парк
  4. Github
  5. публика
    风尘博客