#login #https #warp #user-email

bin+lib login_app_2

使用Warp、HTTPS、多语言实现的登录App版本2(认证)

1个不稳定版本

0.1.0 2020年9月18日

#11 in #user-email

MIT许可协议

195KB
2.5K SLoC

Rust 2K SLoC // 0.0% comments Handlebars 380 SLoC JavaScript 68 SLoC // 0.1% comments

login_app_2

登录/认证模块是之前login_app的重建。

在本版本中,
- 使用Warp框架简化路由(前一个版本中的Hyper
- 使用了https
- 添加了多语言支持

保留的,
- 使用SQLite数据库存储应用程序数据
- 使用Cookie进行会话管理
- 使用MSMTP发送邮件
- 可定制的值;尽可能多的参数被放入Settings.toml文件,而不是在程序内部硬编码。

目标

以下目标在心中开发

  1. 不断学习(尤其是Rust语言)
  2. 可重用代码
  3. 覆盖登录相关功能、表单或电子邮件,例如
    a. 注册表单
    b. 向注册的电子邮件发送一个令牌;在时间限制后使其过期
    c. 接收令牌作为输入的确认屏幕
    d. 登录表单
    e. 忘记密码表单
    f. 向注册的电子邮件发送一个令牌,在时间限制后使其过期
    g. 接收令牌新密码作为输入的重置密码表单
    h. 首页索引页或第一页),显示登录登出取消链接

先决条件

  1. Rust安装
  2. MSMTP客户端安装(请参阅文件msmtp.md以获取详细信息)

如何使用

  1. 克隆或下载此应用程序
  2. 编辑Settings.toml文件以更新数据库文件夹、日志文件夹、电子邮件服务器详情、IP地址等。
  3. 使用以下命令构建可执行文件:$Cargo build --release
  4. 将以下文件/文件夹复制到一个单独的文件夹中,例如"~/projects":
    a. target/release/login-app文件
    b. resources文件夹
    c. 一个toml文件:Settings.toml
  5. 编辑login_app_2.service以更新文件夹名称,并按照其中的说明在Linux中将此应用程序作为服务运行。
  6. 假设在 Settings.toml 文件中为 ip-addressport 设置为 127.0.0.15050,打开网页浏览器并输入网址为 https://127.0.0.1:5050(忽略浏览器可能报告的无效证书,因为这仅用于开发/测试;在生产环境中,可以使用来自 letsencrypt.org 等来源的真实证书)
  7. 浏览器随后显示一个包含 登录 | 注册 链接和 语言 选择选项的 主页
  8. 点击 注册 链接进入注册页面。
  9. 注册页面显示电子邮件、密码和重复密码等字段。填写并提交。将打开一个确认页面。
  10. 将发送到电子邮件中的令牌复制到这个确认页面,或者在开发环境中,转到 DB Browser for SQLite(假设它已经安装在linux机器上)... 打开数据库文件,它很可能命名为 login_app.db/login_app/database 文件夹下,打开 app_user 表,在其中定位一个条目,复制其 token 字段下的数据,粘贴 这些数据到确认页面。
  11. 输入令牌有时间限制,例如 30秒,这可以在 Settings.toml 文件中自定义。
  12. 时间限制到期后,注册数据将从数据库中 删除。有两个不同的时间限制检查点
    • 一个在 客户端,在javascript中,另一个在 服务器端,在rust中。
    • 如果浏览器打开且在时间限制内没有用户输入,则使用客户端时间限制。
    • 如果浏览器关闭,则使用服务器端时间限制。
  13. 提交有效的令牌后,注册即被确认。
  14. 转到登录页面并尝试使用凭证登录。
  15. 登录成功后,将显示 index / 主页 / 第一 页面,包含用户的电子邮件地址、注销和取消链接。
  16. 如果发生错误,将保持在登录屏幕,显示错误为 无效凭证!
  17. 如果忘记密码,转到登录页面,点击 忘记密码?
  18. 在忘记密码表单中输入电子邮件地址。
  19. 提交此请求后,将发送包含令牌的电子邮件。将其复制到下一个屏幕,即重置密码页面。
  20. 重置密码 页面上,输入 令牌新密码重复新密码 并提交。出现一个状态页面,显示成功或错误。成功后,尝试使用新密码登录。
  21. 为了支持多种语言,使用逗号分隔值(CSV)文件。
    • csv文件中的第一个字段保留用于键文本,第二个字段及其之后,输入语言文本。
    • 使用三个csv文件
      a. dictionaries.csv 文件用于支持HTML页面中的文本
      b. messages.csv 文件用于显示应用程序特定的消息,并且
      c. errors.csv 文件用于显示应用程序错误

演示

以下链接可以找到演示应用程序
LoginApp2 演示

许可证

MIT

依赖关系

~78MB
~1.5M SLoC