start_url / index页面上的Angular 9 PWA社交登录重定向问题

Posted

技术标签:

【中文标题】start_url / index页面上的Angular 9 PWA社交登录重定向问题【英文标题】:Angular 9 PWA social login redirects issue on start_url / index page 【发布时间】:2021-05-07 00:45:13 【问题描述】:

我的 Angular 应用程序正在使用 s-s-r 和 PWA 的 Angular 9 上运行。它在 Heroku+ cloudflare 上运行。

当我尝试在索引页面上通过 Facebook/Google 登录时,角度会出现请求超时错误。

例子:

打开索引页,https://coursesity.com 进行社交登录 它重定向到https://coursesity.com/?token=avafafdaregasafag Angular 给出超时错误。 用户无法登录

但如果我使用其他带有 URL+前缀的页面进行社交登录,它可以正常工作。

示例:

打开https://coursesity.com/section/development 进行社交登录 它重定向到https://coursesity.com/section/development/?token=avafafdaregasafag 用户登录成功。

在实施 PWA 和 service worker 之前,它运行良好。

这可能是什么问题?尤其是索引页。

ngsw-config.json


  "index": "/index.html",
  "assetGroups": [
    
      "name": "app",
      "installMode": "prefetch",
      "updateMode": "prefetch",
      "resources": 
        "files": [
          "/favicon.ico",
          "/*.html",
          "/*.css",
          "/*.js"
        ],
        "urls": [
          "https://fonts.googleapis.com/**"
        ]
      
    , 
      "name": "assets",
      "installMode": "lazy",
      "updateMode": "prefetch",
      "resources": 
        "files": [
          "/assets/**",
          "/*.(eot|svg|cur|jpg|png|webp|gif|otf|ttf|woff|woff2|ani)"
        ]
      
    ],
    "dataGroups": [
      
        "name": "api",
        "urls": ["/api/**"],
        "cacheConfig": 
          "strategy": "freshness",
          "maxSize": 20,
          "maxAge": "1h",
          "timeout": "5s"
        
      
    ]

Manifest.json

  "name": "Coursesity",
  "short_name": "Coursesity",
  "description": "https://coursesity.com",
  "theme_color": "#5e5e9a",
  "background_color": "#FFFFFF",
  "display": "standalone",
  "scope": "/?utm_source=a2hs",
  "start_url": "/?ref=pwa",
  "icons": [
    
      "src": "assets/images/favicon/logo-72x72.png",
      "sizes": "72x72",
      "type": "image/png"
    ,
    
      "src": "assets/images/favicon/logo-96x96.png",
      "sizes": "96x96",
      "type": "image/png"
    ,
    
      "src": "assets/images/favicon/logo-512x512.png",
      "sizes": "512x512",
      "type": "image/png"
    
  ]

【问题讨论】:

【参考方案1】:

快速浏览一下,这似乎与在构建应用程序后更改 s-s-r index.html 有关。您可以通过 /ngsw/state 中看到的错误推断这一点(有关 Angular SW 调试 API 的更多详细信息,请参阅 here):

Driver state: EXISTING_CLIENTS_ONLY (Degraded due to: Hash mismatch (cacheBustedFetchFromNetwork): https://coursesity.com/index.html: expected 4e46d6b5588a4b7358aa32d9240776f02de026c5, got 8c24eec826b40fd30b5c17973a851ffe2f65f4a8 (after cache busting)
Error: Hash mismatch (cacheBustedFetchFromNetwork): https://coursesity.com/index.html: expected 4e46d6b5588a4b7358aa32d9240776f02de026c5, got 8c24eec826b40fd30b5c17973a851ffe2f65f4a8 (after cache busting)
    at PrefetchAssetGroup.<anonymous> (https://coursesity.com/ngsw-worker.js:96:123)
    at Generator.next (<anonymous>)
    at fulfilled (https://coursesity.com/ngsw-worker.js:55:98))
Latest manifest hash: 59971a1ef1069cc04a945808cc5f4fc4a1e1a85b
Last update check: 3m31s602u

简而言之,软件在构建后计算所有资产(即文件)的哈希值。这些哈希存储在ngsw.json(基于ngsw-config.json 生成)。当它获取文件时,它会再次对它们进行哈希处理,并将实际哈希值与存储在ngsw.json 中的哈希值进行比较。

如果哈希不匹配,它知道它不能信任它的配置并进入降级模式(它不为新客户端提供服务)。


这听起来像是您设置构建应用程序的方式,并且 s-s-r 在 SW 计算其哈希并将其存储在 ngsw.json 之后最终修改了 index.html

使用以下命令修改 index.html 后,一个简单的解决方法是重新构建 SW 清单 (ngsw.json):

./node_modules/.bin/ngsw-config /path/to/dist/directory /path/to/ngsw-config.json

最后,让我说(如果您使用的是 Angular CLI)默认 PWA 和 s-s-r 设置应该可以开箱即用。如果不是这种情况,如果您能提供最小的复制品(例如我可以检查并构建以自己查看问题的 repo),我会很乐意仔细查看。

【讨论】:

我进一步调试了这个问题,发现索引页面上没有设置cookie。当我在 localhost 中运行相同的东西时,cookie 被设置。在生产中,它不起作用。这更像是 Heroku 或 cloudflare 的问题。已保存令牌:imgur.com/uckon0O 未保存令牌:imgur.com/dkYqoSb

以上是关于start_url / index页面上的Angular 9 PWA社交登录重定向问题的主要内容,如果未能解决你的问题,请参考以下文章

如何在Scrapy CrawlSpider中找到当前的start_url?

在 Edit.php 页面上编辑后如何更新 Index.php 页面上的数据库值

如何将用户重定向到另一个html页面的html页面上的“section”?

跟踪动态网站上的页面浏览量

尝试通过单击另一个页面上的链接来访问页面上的部分时出错

CentOS 7 上的 Apache:配置