前言
本节我们讲一下登录模块的实现。一共有两种登录方式(当然无论是哪一种登录,都离不开服务端的配合)。
- 账号登录
- 第三方登录
实现
账号登录没什么好说的,就调用背景页的Airdroid.Account.signIn
:
1 | this.account.signIn(mail, pwd) |
第三方登录实现
主要是第三方登录。主要提供Facebook, Twitter, Google+ 三种方式。 操作方式就是点击之后,弹出一个授权框。 popup.js
的代码如下:
1 | // 第三方登录 |
逻辑其实没啥好说的,就是配合服务端的接口,来实现第三方登录的授权。这边主要讲一个弹出popupWindow
的各浏览器的实现。 封装在 tabs.js
里面,里面有各个浏览器的弹出窗体实现,并且当窗体关闭的时候,会执行done
回调, util/tabs.js
:
1 | /** |
1. Chrome
逻辑跟正常的html
一样,差不多:
1 | popup = window.open(url, '_blank', optsArr.join(',')); |
2. Safari
Safari
要调用一个方法 openBrowserWindow
:
1 | var w = safari.application.openBrowserWindow(); |
并且可以监听这个窗口的close
事件。
ps: 但是这个有个问题,因为Safari
的popup
页面在请求接口的时候,不能把cookie
带过去,所以当第三方登录成功之后,前端也不知道,所以这个问题,后面要想办法解决??? 所以就会这么一个问题,就是明明第三方登录授权成功,服务端也写入 cookie
, 但是前端就是没办法取到,导致哪怕第三方登录成功,但请求还是失败
ps: Safari
这边原则上是不支持 session cookie
的传递,对于 parameter cookie
类型的 cookie
是可以传递的。 具体看 浏览器 extension 插件开发系列(17) -- Safari 遇到的问题, 本例之所以不支持是因为第三方登录服务端写入的 cookie 是属于 session cookie
, 所以才会取不到。
3. Firefox
Firefox
的做法,就是到中间页面触发一个new_window_open
方法,并监听一个new_window_close
方法。 在 main.js
中:
1 | // 新建一个新的窗口 |
总结
所以第三方登录的弹窗,虽然每个浏览器都可以弹,但是对于Safari
来说,因为 cookie
的原因,导致没办法校验是否真的登录成功。其他的两个浏览器没问题
系列文章:
浏览器 extension 插件开发系列(01) -- 前言和确认需求
浏览器 extension 插件开发系列(02) -- Chrome 插件的启动以及调试
浏览器 extension 插件开发系列(03) -- Firefox 插件的启动以及调试
浏览器 extension 插件开发系列(04) -- Safari 插件的添加以及调试
浏览器 extension 插件开发系列(05) -- Safari 插件申请开发者证书
浏览器 extension 插件开发系列(06) -- 各浏览器导航栏按钮的配置的点击出现的panel
浏览器 extension 插件开发系列(07) -- 获取各浏览器端的背景页
浏览器 extension 插件开发系列(08) -- 背景页启动和登录持久化
浏览器 extension 插件开发系列(09) -- popup以及其他前端页面的启动
浏览器 extension 插件开发系列(10) -- 事件驱动模型
浏览器 extension 插件开发系列(11) -- 登录模块(包括第三方登录和弹框)
浏览器 extension 插件开发系列(12) -- 实现右键菜单推送消息
浏览器 extension 插件开发系列(13) -- 实现消息过来出现桌面通知
浏览器 extension 插件开发系列(14) -- 点击reply出现回复小窗口
浏览器 extension 插件开发系列(15) -- chrome多文件上传(拖拽上传或者点击上传)
浏览器 extension 插件开发系列(16) -- Firefox 遇到的问题
浏览器 extension 插件开发系列(17) -- Safari 遇到的问题