【PWA学习与实践】(4) 解决FireBase login验证失败问题

本文是《PWA学习与实践》系列的第四篇。是我在测试其他demo时遇到的一个问题,算是一篇TroubleShooting。

PWA作为今年最火热的技术概念之一,对提升Web应用的安全、性能和体验有着很大的意义,非常值得我们去了解与学习。

本系列文章《PWA学习与实践》会逐步拆解PWA背后的各项技术,通过实例代码来讲解这些技术的应用方式。也正是因为PWA中技术点众多、知识细碎,因此我在学习过程中,进行了整理,并产出了《PWA学习与实践》系列文章,希望能带大家全面了解PWA中的各项技术。对PWA感兴趣的朋友欢迎关注。

引言

在前一篇文章《让你的WebApp离线可用》中,我们使用Service Worker来做缓存与离线支持。是有一个重要的问题:Service Worker必须要在HTTPS协议下才能运行(或者localhost)。当然,对于一些只有前端资源(不涉及后端服务)的demo,我们完全可以将这些前端(静态资源)托管在一个HTTPS服务下,使得Service Worker可以使用。我选择了google的FireBase来托管demo(其实github page也是个不错的选择)。

使用FireBase非常简单,只需要firebase login -->firebase init-->firebase deploy即可。但是在firebase login的过程中,遇到了一些问题。这篇文章主要总结了我在firebase login遇到的问题及解决方式:

  1. 无法获取authorization code
  2. Authentication Error: Your credentials are no longer valid.

有需要的朋友可以继续看。

首先,如果你对firebase完全不了解,下面会有一段非常简短的介绍。

什么是FireBase

前段时间学习PWA,在跟着官方教程完成demo后,想要在手机上测试一下效果。然而,遇到的一个问题就是:PWA需要HTTPS协议(或者使用localhost)。

这就需要我们有一个HTTPS的服务,并在其上面部署我们本地写好的demo。而官方教程的最后,推荐使用firebase来托管你的代码。

FireBase的各种功能与服务

在FireBase的众多使用场景中,Develop -> Hosting(托管)就是这个PWA demo需要用到的了。然而,在执行firebase login(账号登录)过程中,却碰到了一些问题。

问题一:在浏览器登录账号后,无反应(无法获取authorization code)

最开始,我在CLI中输入firebase login,选择y后,CLI会需要一个authorization code;而浏览器会打开并提示你进行登录。

这里我用google账户进行授权登录。然而,在授权之后,却迟迟没有响应(无法得到authorization code)。这时候,我发现浏览器显示,似乎是在等待localhost进行响应。

解决这个问题的方法就是:在登录时,使用firebase login --no-localhost进行登录。

重新使用firebase login --no-localhost登录。这里我选择了google账号进行登录,重复上面的过程:

这次,你就会在浏览器中获得一串authorization code值:

authorization code

将它粘贴到CLI中即可。【问题一】解决!

问题二:Error: Authentication Error: Your credentials are no longer valid.

然而,在CLI中输入authorization code之后,在等待了较长时间的验证后,CLI中报出了如下错误:

这是怎么回事呢?通过查阅一些资料发现,这很可能是你在电脑上开启代理工具所导致的。firebase-tool依赖的某个npm包(faye-websocket)中,未开启相关的代理设置,因此无法进行验证。

解决这个问题的方法有两种:

方法一:在路由器上设置代理,而非本机

有些文章指出,通过在路由器上设置代理,而非在本机开启代理,可以避免这个问题。不过由于一些原因,暂时还没有尝试这种方式,不过通过一些反馈来看,应该是一个有效的方法。

方法二:(hack) 修改代码与相关环境变量

该方法较第一种方法来看,会稍微“硬”那么一些。具体的操作方式如下:

  1. 设置环境变量http_proxy,我本机的代理使用的是1087端口。export http_proxy=http://localhost:1087
  2. 修改faye-websocket,开启代理配置。faye-websocket是firebase依赖的一个WebSocket库,需要为其client.js添加如下配置:
var Client = function(_url, protocols, options) {
    options = options || {};
    // 添加proxy配置
    options.proxy = {
        origin:  'http://localhost:1087',
    };
    …
}

如果你是全局安装的firebase-tools,你可以通过如下方法找到client.js

NODE_PATH=`npm prefix -g`
// client.js的位置
$NODE_PATH/lib/node_modules/firebase-tools/node_modules/firebase/node_modules/faye-websocket/lib/faye/websocket/client.js
  1. 设置环境变量NODE_TLS_REJECT_UNAUTHORIZED。export NODE_TLS_REJECT_UNAUTHORIZED=0

  2. 重新登录,firebase login --no-localhost,重复之前的操作。你会发现,登录成功!

image.png

【问题二】解决!

p.s. 针对这个问题,github上也有一个issue:Unable to deploy behind a proxy。此外,推荐使用全局代理的方式,是你的CLI也使用代理。

写在最后

最后,还是回到我开发PWA时的需求。文章最开始提到了,我是为了在移动端测试PWA demo的效果,所以使用FireBase来托管资源。当然,除了FireBase,还有下面两个办法:

  1. 使用github page。由于github全站都是运行在HTTPS下,因此在github page上托管的静态站点可以使用Service Worker;

  2. 使用localhost/127.0.0.1。了解PWA的话,你会知道除了HTTPS之外,也可以使用localhost(这一设计是为了方便本机调试)。因此,可以使用代理,把你的移动设备连上它。这样,你在移动设备上就可以通过127.0.0.1来访问你在电脑上这个PWA demo的web server了。同时由于是localhost/127.0.0.1,因此也能够支持Service Worker的功能了。

本文是《PWA学习与实践》系列中的第四篇。这篇文章并没有探讨PWA中实际的技术,而是记录了我在开发、调试P过程与遇到的问题。可能有朋友也会遇到类似问题,因此记录下来和大家分享。

在下一篇文章中,我们还是会回到PWA背后的技术,来了解一下,如何使用Push API来实现后端服务向客户端进行消息推送

《PWA学习与实践》系列文章

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,294评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,493评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,790评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,595评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,718评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,906评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,053评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,797评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,250评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,570评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,711评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,388评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,018评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,796评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,023评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,461评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,595评论 2 350

推荐阅读更多精彩内容