Rust - Tauri实现OAuth登录
前言
注意,本文不介绍Rust/Tauri/OAuth相关概念!!
由于最近和朋友打算一起写一款ToDo-List软件,其中有一个需求是减少用户对账号密码的管理,比如我就特别讨厌每用一个软件都需要记一个密码。而且密码还最好与之前的密码不重复,所以对接一个OAuth系统就显得非常必要了。
- Rust参考教程:https://www.bilibili.com/video/BV1hp4y1k7SV
- Tauri官网:https://tauri.app/
- OAuth参考链接:http://blog.codezf.com/archives/5/
解决思路
首先我们知道OAuth这类认证都有一个重定向地址,当你完成登录操作后会重定向到你指定的url中。而我们是桌面端无法提供一个url给OAuth完成认证的。
那么如何解决这个问题呢,其实很简单,参考主流软件都可以得到一个简单的思路,利用服务器构造一个可以访问的页面当作回调地址,得到OAuth的Code后将其返回给应用端。但这里引入了第二个问题,网页返回的内容如何传递给应用端,其实也很简单,不要整花里胡哨的东西,就给应用端塞一个web服务端功能就好了。
注意:OAuth返回的结果要么是json,要么是路径参数,但是它是以页面形式返回的。无法和正常接口一样利用js获取到,所以我们这里需要引入一个web服务端功能
这里我采用的是一款优秀的web库,Salvo库。Salvo 构建于 tokio 和 hyper 之上. 仅仅需要 Rust 基础知识即可开发功能强大的后端服务。
- crates地址:https://crates.io/crates/salvo
- 中文文档:https://salvo.rs/zh-hans/
整体流程如下所示:
- 应用端通过Shell唤起默认浏览器打开认证地址
- 认证完后通过重定向地址重定向到我们构造在云服务器上的网页
- 该网页得到OAuth的code后,通过ajax或axios等请求我们tauri程序自带的服务端接口
- 本地服务端得到OAuth的code后,通过tauri的emit函数通知js代码继续后续操作
- 最后提示用户可以关闭授权的网页了
注意: 上述步骤使用默认浏览器是为了方便例如github这类OAuth登录的,因为如果默认浏览器登录过就无需再次登录了。
写在最后
本文的最大问题是无法关闭通过Shell打开的浏览器页面,使用window.close()
函数会提示Scripts may close only the windows that were opened by them.
,如果你有更好的办法,可以留言互相学习一下。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 凌鸽技术博客!
评论