无密码的网站验证/登录

时间:2020-02-16 20:42:56

标签: authentication language-agnostic password-less

许多网站都有无密码的身份验证系统,即,您仅可以使用电子邮件进行注册/登录/注销,并且不需要密码。

一个人将如何实现这样的系统?(框架和与语言无关)

注意:我已经读过:

1 个答案:

答案 0 :(得分:0)

在我搜索了很长时间之后,这是我使用SO的“回答您自己的问题-问答式”功能发布的摘要。我会尽可能地对其进行更新以改进它。

无密码身份验证方法1:“单击我们刚刚发送给您的电子邮件中的链接以进行登录”

注册:

  • 客户填写注册表格
  • 客户端AJAX POST http://example.com/_signup {email: 'test@test.com', data: 'data'}
  • 服务器检查用户是否已经存在
  • 客户消息:“成功:已发送电子邮件” “失败:已存在”
  • 服务器为用户创建数据库记录
  • 服务器生成随机会话ID,然后发送带有以下链接的电子邮件:http://example.com/?sessid=f65a5bc45

登录:

  • 客户填写登录表格
  • 客户端AJAX POST http://example.com/_login {email: 'test@test.com'}
  • 客户消息:“如果该帐户存在,则已发送电子邮件”
  • 服务器检查电子邮件是否在数据库中
  • 服务器生成随机会话ID,然后发送带有以下链接的电子邮件:http://example.com/?sessid=f65a5bc45

打开链接:

  • 客户端打开链接http://example.com/?sessid=f65a5bc45
  • 客户端:document.cookie = "sessid=f65a5bc45; expires=Fri, 31 Dec 9999 23:59:59 GMT"(或在服务器端进行操作,例如使用PHP)
  • 客户端:?sessid个查询字符串已删除,导航至/

打开/

  • 客户端:AJAX POST example.com/_load {sessid: getCookieValue('sessid')}
  • 服务器检查有效的sessid。如果是这样,则将用户数据发送给客户端
  • 客户端xhr.onreadystatechange:用用户数据填充页面

无密码身份验证方法2:“在我们刚刚发送给您的电子邮件中输入验证码,例如123456”

注册:

  • 客户填写注册表格
  • 客户端AJAX POST http://example.com/_signup {email: 'test@test.com', data: 'data'}
  • 客户消息“已发送电子邮件,请在此处输入您的代码:” “失败:已存在”
  • 服务器为用户创建数据库记录
  • 下一个段落从(*)开始

登录:

  • 客户填写登录表格
  • 客户端AJAX POST http://example.com/_login {email: 'test@test.com'}
  • 客户消息“如果该帐户存在,则已发送电子邮件,请在此处输入您的代码:”
  • 服务器检查数据库中是否有电子邮件
  • (*)服务器生成随机数并发送电子邮件:“这是您的代码:123 456”
  • 客户填写代码表
  • 客户端AJAX POST http://example.com/_login {email: 'test@test.com', code: '123456'}
  • 服务器检查代码是否有效。如果是这样,服务器会生成一个随机会话ID,然后发送给客户端
  • 客户端:document.cookie = "sessid=f65a5bc45; expires=Fri, 31 Dec 9999 23:59:59 GMT"(或使用PHP在此服务器端进行操作)
  • 客户端:导航至/

打开/

  • 客户端AJAX POST http://example.com/_load {sessid: getCookieValue('sessid')}
  • 服务器检查有效的sessid。如果是这样,则将用户数据发送给客户端
  • 客户端xhr.onreadystatechange:用用户数据填充页面