当我为此搜索了很长时间时,这是我发布的摘要,其中包含 SO 的“回答您自己的问题 - 问答式”功能。我会尽可能多地更新它以改进它。
无密码验证方法#1:“点击我们刚刚发送给您的电子邮件中的链接进行登录”
注册:
登录:
打开链接:
打开/
:
- 客户端:AJAX POST example.com/_load
{sessid: getCookieValue('sessid')}
- 服务器检查是否有效的 sessid。如果是,将用户数据发送到客户端
- 客户端
xhr.onreadystatechange
:用用户数据填充页面
无密码验证方法#2:“在我们刚刚发送给您的电子邮件中输入密码登录,例如 123 456”
注册:
- 客户填写注册表
- 客户端 AJAX POST http://example.com/_signup
{email: 'test@test.com', data: 'data'}
- 客户端消息“已发送电子邮件,请在此处输入您的代码:”或“失败:已存在”
- 服务器为用户创建数据库记录
- 从 (*) 开始的下一段同上
登录:
- 客户填写登录表格
- 客户端 AJAX POST http://example.com/_login
{email: 'test@test.com'}
- 客户消息“如果帐户存在,则已发送电子邮件,请在此处输入您的代码:”
- 服务器检查数据库中是否有电子邮件
- (*) server generates random number + sends email: "Here is your code: 123 456"
- client fills code form
- client AJAX POST http://example.com/_login
{email: 'test@test.com', code: '123456'}
- server checks if valid code. if so, server generates a random session ID, and sends to client
- client:
document.cookie = "sessid=f65a5bc45; expires=Fri, 31 Dec 9999 23:59:59 GMT"
(or do this server side with PHP)
- client: navigate to
/
Open /
:
- client AJAX POST http://example.com/_load
{sessid: getCookieValue('sessid')}
- server checks if valid sessid. if so, sends user data to client
- client
xhr.onreadystatechange
: fills page with user data