Сейчас почти большинствоApp
Оба поддерживают использование нескольких сторонних учетных записей для входа в систему, таких как: WeChat,QQ
, Weibo и т. д., мы называем это единым входом в систему с несколькими учетными записями. Дизайн таблицы и дизайн процесса этих счетов очень важны, иначе последующее расширение будет плохим. В этой статье не приводятся какие-либо практики кода, но чтобы отсортировать блоггеров на основе дизайна нашего модуля учетной записи, предоставьте идеи только для справки.
1. Самостоятельная система входа в систему
1.1 Вход и регистрация по номеру мобильного телефона
Идея этого дизайна в том, что каждый номер мобильного телефона соответствует пользователю, а номер мобильного телефона является обязательным элементом.
Процесс:
- Сначала введите номер мобильного телефона, а затем отправьте его на сервер. Сначала определите, есть ли у номера мобильного телефона учетная запись. Если нет, будет сгенерирован случайный код подтверждения, и номер мобильного телефона и код подтверждения будут привязаны к
Redis
, и установите определенное время истечения срока действия (время истечения обычно составляет 5 минут, что является сроком действия нашего общего кода подтверждения мобильного телефона), и, наконец, отправьте код подтверждения пользователю через SMS. - После получения кода подтверждения пользователь заполняет основную информацию, такую как код подтверждения и пароль, в интерфейсе, а затем отправляет эти данные на сервер. После того, как сервер получает его, он сначала оценивает
Redis
Является ли проверочный код, соответствующий номеру мобильного телефона, тем же самым, в случае неудачи он вернет код ошибки.Если это удастся, он создаст учетную запись и сохранит пароль для пользователя. - После успешной регистрации пользователи могут
手机号+密码
чтобы залогиниться.
проблема:
- Пользовательский интерфейс плохой, вам необходимо завершить получение кода подтверждения, ввести код подтверждения/пароль/имя пользователя и много другой информации для завершения регистрации, а затем вы можете использовать его;
- Забыть пароль легко, после того, как вы его забыли, вы можете сбросить пароль, только забыв пароль.
1.2 Оптимизация регистрации и входа
Идея схемы заключается в том, чтобы ослабить обязательный характер пароля, то есть независимо от того, зарегистрировался пользователь или нет,
手机号 + 验证码
Войти напрямую (зарезервировано手机号 + 密码
способ входа).
Процесс:
- Введите номер телефона и отправьте его на сервер. Сервер генерирует случайный проверочный код и привязывает номер мобильного телефона и проверочный код к
Redis
, и установите определенное время истечения срока действия (время истечения обычно составляет 5 минут, что является сроком действия нашего общего кода подтверждения мобильного телефона), и, наконец, отправьте код подтверждения пользователю через SMS. - После того, как пользователь получит проверочный код, ему нужно только заполнить полученный проверочный код в интерфейсе и отправить его на сервер. После того, как сервер получает его, он сначала оценивает
Redis
Является ли проверочный код, соответствующий номеру мобильного телефона в нем, одинаковым, в случае неудачи он вернет код ошибки, а в случае успеха он войдет в систему напрямую. Если это старый пользователь, извлеките информацию о пользователе напрямую; если это новый пользователь, предложите ему улучшить информацию о пользователе (не обязательно). - пользователь через
手机号 + 验证码
После входа в систему вы также можете установить пароль, а затем пройти手机号 + 密码
Способ входа, то есть: пароль не требуется.
Дизайн пользовательской таблицы:
id | user_name | user_password | user_mobile | state | more |
---|---|---|---|---|---|
Идентификатор пользователя | имя пользователя | пользовательский пароль | номер мобильного телефона | Статус аккаунта | другая информация |
1.3 Представляем стороннее решение для учетной записи
1.3.1 Вход в Weibo
ВходитьWeb2.0
В то время Weibo открыла сторонний веб-сайт для входа в систему. Продукт сказал, что он должен быть у нас, и мы можем войти в нашу учетную запись Weibo, добавив учетную запись Weibo.App
Ну, и он должен быть связан с нашей собственной пользовательской таблицей.
Процесс:
- Клиент вызывает интерфейс входа в Weibo, чтобы ввести имя пользователя и пароль. После успешного входа он вернется
access_token
,пройти черезaccess_token
ВоспроизведениеAPI
Интерфейс получает информацию о пользователе. - Сервер создает учетную запись в нашей пользовательской таблице с помощью информации о пользователе, а позже сторонняя учетная запись может войти непосредственно через учетную запись Weibo.
Дизайн таблицы с информацией о пользователе Weibo:
id | user_id | uid | access_token |
---|---|---|---|
идентификатор первичного ключа | Идентификатор пользователя | уникальный идентификатор Weibo | Код авторизации |
1.3.2 Кошмар грядет
Незамедлительно после,QQ
Снова открыть вход пользователя, открыть вход пользователя WeChat, войти пользователя разработки NetEase. . . . . . Если вы хотите получить доступ сразу ко многим сторонним логинам, вы можете только создать новую таблицу в соответствии с «Таблицей информации о пользователе Weibo» и переписать набор сторонних логинов.
2. Оптимизируйте учетную систему
2.1 Анализ исходной системы учетной записи
- Самостоятельная система входа в систему: неважно
手机号 + 密码
, все еще手机号 + 验证码
, является своего рода用户信息+密码
форма проверки; - Сторонний вход: также
用户信息+密码
В виде пользовательской информации, которая хранится в сторонней системеID
(уникальный идентификатор в сторонней системе), парольaccess_token
, это просто пароль, который периодически меняется с датой истечения срока действия.
2.2 Новая система учетных записей
2.2.1 Дизайн таблицы данных
Таблица основных сведений о пользователе:
id | nickname | avatar | more |
---|---|---|---|
Идентификатор пользователя | Никнейм | Аватар | другая информация |
Таблица информации об авторизации пользователя:
id | user_id | identity_type | identifier | credential |
---|---|---|---|---|
идентификатор первичного ключа | Идентификатор пользователя | Тип входа (номер мобильного телефона/электронная почта) или имя стороннего приложения (WeChat/Weibo и т. д.) | Номер мобильного телефона/электронная почта/уникальный идентификатор третьего лица | Учетные данные для пароля (сохранение пароля для самостоятельной покупки учетной записи, токен для сохранения третьим лицом) |
инструкция:
- Пользовательская таблица разделена на
用户基础信息表
+用户授权信息表
; - Форма информации о пользователе не сохраняет никаких паролей, не сохраняет никакой информации для входа (например, имя пользователя, номер мобильного телефона, адрес электронной почты), сохраняет только основную информацию, такую как никнеймы и аватары; все, что связано с авторизацией, размещается в информации о пользователе. форма авторизации,Таблица информации о пользователе и таблица авторизации пользователя имеют отношение «один ко многим»..
2.2.2 Процесс входа в систему
手机号 + 验证码
Следуйте предыдущему плану.
-
邮箱/手机号 + 密码
:
Пользователь заполняет邮箱/手机号 + 密码
; При запросе на вход сначала определите тип, например, логин по номеру мобильного телефона:
использоватьtype= 'phone'
комбинироватьidentifier= '手机号'
Найдите, если есть, вынесите и рассудитеpassword_hash
(пароль) совпадает с записьюcredential
соответствует, пройти проверку, если совпадает, то пройтиuser_id
Получить информацию о пользователе;
- Сторонний логин, например WeChat:
Запросtype= 'weixin'
комбинироватьidentifier= '微信 openId'
, если есть запись, войдите напрямую и обновитеtoken
; Предполагая, что связь с сервером WeChat не перехвачена, нет необходимости судить о проблеме с учетными данными.
2.2.3 Преимущества и недостатки
преимущество:
- Типы входа бесконечно расширяются, а стоимость разработки новых типов входа значительно снижается;
- В исходных условиях приложению необходимо проверить, был ли подтвержден номер мобильного телефона и адрес электронной почты, а также соответствующее поле, например
phone_verified
иemail_verified
, теперь покаuser_auths
добавить единыйverified
поле, каждый метод входа может визуально видеть, был ли он проверен; - существует
user_auths
Добавьте соответствующее время иIP
адрес, можно более полно отследить привычки использования пользователя, например: он не использовал Weibo для входа более двух лет, а привязан к WeChat 300 дней; - Если вы говорите, что адрес электронной почты и номер мобильного телефона являются частью информации о пользователе, хотя таблица пользователей расширена, в таблице пользователей все еще есть электронная почта и телефон, но они используются только для «целей отображения», и есть нет существенной разницы с такими атрибутами, как никнейм, аватар или пол;
- При необходимости можно привязать любое количество методов входа одного типа, то есть пользователь может привязать несколько WeChat, несколько почтовых ящиков и несколько номеров мобильных телефонов. Конечно, вы также можете ограничить метод входа в систему только одной записью;
недостаток :
- Если у пользователя есть несколько способов входа в систему, таких как электронная почта, имя пользователя, номер мобильного телефона и т. д., пароль необходимо изменить вместе, иначе он станет
邮箱 + 新密码
,手机号 + 旧密码
может войти, должно быть очень странная ситуация; - Количество кода увеличилось, а в некоторых случаях увеличилось логическое суждение и возросла сложность; например, вошел ли пользователь в систему или нет, зарегистрировался ли пользователь или нет, щелкните ту же ссылку, чтобы перейти на Weibo после сторонней авторизации и возврата, может возникнуть несколько ситуаций:
- Weibo не был зарегистрирован на этом сайте, это очень хорошо, зарегистрируйте его напрямую и войдите в систему;
- Weibo уже существует на этом сайте, текущий пользователь не вошел в систему, и прямой вход выполнен успешно;
- Учетная запись Weibo не зарегистрирована на этом сайте, но текущий пользователь вошел в систему и связан с другой учетной записью Weibo.Что делать, зависит от того, разрешено ли связывание нескольких учетных записей Weibo;
- Weibo не был зарегистрирован на этом сайте, и текущий пользователь вошел в систему, пытаясь выполнить привязку;
- Вейбо зарегистрирован, и пользователь авторизовался с этой учетной записью, почему он повторно привязывается;
- Этот Weibo уже существует на этом сайте, но текущий пользователь вошел в систему и связан с другой учетной записью Weibo, что мне делать?
3. Вход в один клик
3.1 Предыстория
оглядываться手机号 + 验证码
метод входа:
- Введите номер мобильного телефона, дождитесь SMS с кодом подтверждения, введите код подтверждения и нажмите Войти. Для завершения всего процесса может потребоваться более 20 секунд, и операция относительно громоздка;
- Это зависит от сети обмена текстовыми сообщениями, потому что, если не получать текстовые сообщения, вы не войдете в систему.
- С точки зрения безопасности также существует риск утечки проверочного кода. Если кто-то узнает ваш номер телефона и украдет код подтверждения, он также сможет войти в вашу учетную запись.
Но оглядываясь назад, зачем нам капча? Функция кода подтверждения состоит в том, чтобы подтвердить, что номер мобильного телефона принадлежит вам.Кроме использования SMS, есть ли другой способ аутентификации номера мобильного телефона?
- Если текущий номер мобильного телефона может быть получен, номер, введенный пользователем, может быть проверен. Однако из соображений безопасности клиент не может получить номер мобильного телефона напрямую, и оператор может получить номер мобильного телефона через
SIM
Запрос данных карты. - Теперь, когда оператор открыл соответствующие возможности, мы теперь можем судить о том, соответствует ли номер мобильного телефона, введенный пользователем, местному номеру, вызывая интерфейс оператора после того, как пользователь вводит номер мобильного телефона. Таким образом, пользователь сохраняет процесс ожидания SMS-сообщения с кодом подтверждения и ввода кода подтверждения и не ограничивается сетью SMS-сообщений, что упрощает процесс входа в систему.
- Но если подумать дальше, то если оператор может напрямую вернуть нам текущий номер, а не только для проверки, то пользователю даже не нужно заполнять номер мобильного телефона.
Это главный герой раздела:Вход в один клик.
3.2 Аутентификация по моему номеру телефона
Получите номер карты мобильного телефона, используемой текущим мобильным телефоном, и используйте этот номер для прямого входа в систему в один клик.
Преимущества этого метода входа очевидны. Он может завершить процесс регистрации и входа в систему более удобно и быстро, сократив процесс, который мог занять 20 секунд, примерно до 2 секунд, что значительно улучшает пользовательский опыт входа в систему.
Основные шаги заключаются в следующем:
- Инициализация SDK: вызовите метод инициализации SDK и передайте AppKey и AppSecret проекта на платформе.
- Вызов страницы авторизации: вызовите SDK, чтобы вызвать интерфейс авторизации. Сначала SDK инициирует запрос оператору на получение маски номера мобильного телефона, после успешного выполнения запроса переходит на страницу авторизации. На странице авторизации отобразится маска номера мобильного телефона и соглашение с оператором, которое пользователь должен подтвердить.
- Согласитесь с авторизацией и войдите в систему: пользователь соглашается с соответствующим соглашением, нажимает кнопку входа на странице авторизации, SDK запросит токен для получения этого номера и вернет токен клиенту после успешного запроса.
- Получить номер: Отправьте полученный токен на наш собственный сервер, и сервер вызовет интерфейс входа в один клик оператора с токеном, и номер мобильного телефона будет возвращен в случае успешного звонка. Сервер использует номер мобильного телефона для входа или регистрации, возвращает результат операции клиенту и завершает вход в один клик.
В настоящее время Alibaba Cloud предоставляет этот метод и совместим с номерами трех основных операторов.Подробнее см.Облачный SDK Алибаба
4. Резюме
По мнению блогера, лучшего решения нет, достаточно выбрать дизайн, применимый к текущей системе. Не вникайте, что лучше, а что хуже, только ноги знают, подошла обувь или нет.