MGit应用使用OAuth 2.0协议实现GitHub和Gitee的账号授权。本文档详细介绍了OAuth认证的使用方法、技术实现以及可能遇到的问题与解决方案。
- 在应用中点击"登录GitHub"按钮
- 选择使用内置浏览器或系统浏览器进行授权
- 登录GitHub账号(如果尚未登录)
- 授权应用访问您的GitHub仓库
- 授权成功后自动返回应用
- 在应用中点击"登录Gitee"按钮
- 选择使用内置浏览器或系统浏览器进行授权
- 登录Gitee账号(如果尚未登录)
- 授权应用访问您的Gitee仓库
- 授权成功后自动返回应用
MGit使用PyQt5的WebEngine组件实现内置浏览器,主要特点包括:
- 基于Chromium的渲染引擎
- 完全整合到应用界面中
- 资源自动清理,避免内存泄漏
- 证书错误自动处理
应用在本地启动一个临时HTTP服务器用于接收OAuth回调:
- 自动选择可用端口(8000, 8080, 9000, 9090等)
- 支持HTTP协议(避免自签名证书问题)
- 接收授权码并安全传递给应用
为确保长时间运行不会出现资源泄漏,应用实现了以下优化:
- WebEngine资源完全清理机制
- 信号连接的安全断开处理
- 授权完成后的定时自动关闭
- 强制垃圾回收触发
- GitHub: 仅请求
repo权限,用于访问仓库内容 - Gitee: 仅请求
projects,pull_requests,issues权限
- 授权令牌使用Fernet对称加密算法本地加密存储
- 加密密钥受操作系统用户账户保护
- 应用不会将您的令牌发送到除GitHub/Gitee之外的任何服务器
可能原因:网络连接问题或WebEngine组件加载失败
解决方案:
- 检查网络连接
- 尝试使用系统浏览器进行授权
- 确保正确安装了PyQtWebEngine
可能原因:回调服务器端口被占用或防火墙阻止
解决方案:
- 重启应用,它会自动选择其他可用端口
- 临时禁用防火墙或创建相应的例外规则
可能原因:WebEngine资源冲突或内存不足
解决方案:
- 使用系统浏览器替代内置浏览器
- 重启应用后再次尝试
- 关闭其他占用大量内存的应用
可以通过环境变量预先配置OAuth客户端ID和密钥:
GITHUB_CLIENT_ID="your_github_client_id"
GITHUB_CLIENT_SECRET="your_github_client_secret"
GITEE_CLIENT_ID="your_gitee_client_id"
GITEE_CLIENT_SECRET="your_gitee_client_secret"
如果需要使用自定义的Git服务(如企业版GitHub),可以通过应用设置进行配置。