当前位置: 首页 > 面试题库 >

Heroku Node + React App:未处理锚标记身份验证请求

李俭
2023-03-14
问题内容

我正在建立一个节点+快递服务器,前端带有create-react-
app。我使用passportjs进行身份验证路由处理,所有东西完全在localhost上运行(后端在端口5000上,前端在端口3000上,带有代理)。当我部署到Heroku时,服务器似乎无法识别我的身份验证路由,因此heroku提供了static
index.html。如果我用Postman测试我的API似乎都可以正常工作(我可以看到google
oauth的html页面),但是在我的react应用程序中带有锚标记或在url中手动编写端点,则只能看到同一页面的重新加载。

我的服务器index.js:

const express = require('express')
const passport = require('passport')
const mongoose = require('mongoose')
const path = require('path')

// KEYS
const keys = require('./config/keys')

// MONGOOSE MODELS
require('./models/User')

mongoose.connect(keys.mongoURI)

// PASSPORT SETUP
require('./config/passport')

// CREATE THE SERVER
const app = express()

// EXTERNAL MIDDLEWARES
require('./middlewares/external')(app)

// ROUTE HANDLERS
require('./routes/authRoutes')(app)

// PRODUCTION SETUP
if (process.env.NODE_ENV === 'production') {
  // express serve up production assets ( main.js, main.css )
  app.use(express.static('client/build'))
  app.get('*', (req, res) => {
    res.sendFile(path.resolve(__dirname, 'client', 'build', 'index.html'))
  })
}

// START THE SERVER
const PORT = process.env.PORT || 5000
app.listen(PORT)

流:

LOCALHOST:react应用程序启动->我单击“ Google登录”-> GET请求到“ / auth /
google”->谷歌oauth流->重定向到“ /”,我的react应用程序再次出现,用户已登录。

英雄:在my-app.herokuapp.com/上反应应用程序->单击“ Google登录”->页面重新加载,没有任何反应。用户尚未登录。

拜托,帮帮我。谢谢


问题答案:

这是由于默认情况下安装了Service
Worker才能使您的应用成为渐进式Web应用

要确定这是否对您来说是个问题,请在隐身模式下测试您的heroku生产模式应用程序。现在,对/ auth /
google的请求应到达服务器,并在开发过程中像其行为一样运行。

确定存在问题后,您可以删除

import registerServiceWorker from "./registerServiceWorker";

从您的/client/src/index.js文件中。

您的浏览器缓存可能已经包含一个已安装的Service Worker,因此您可能必须

  1. 清除用户浏览器上的浏览器缓存
  2. 以编程方式卸载服务器工作程序
        import { unregister } from './registerServiceWorker';
    ....
    unregister();


 类似资料:
  • 问题内容: 未验证用户身份时如何处理ajax请求? 有人进入页面,留出一个小时的空间,返回,然后使用jQuery()在通过ajax的页面上添加评论。由于未通过身份验证,因此方法返回RedirectToRoute结果(重定向到登录页面)。你用它做什么?您如何在客户端处理它,以及如何在控制器中处理它? 问题答案: 编辑: 我很久以前就写了以上答案,现在我认为发送403不是正确的方法。403的含义略有不

  • 问题内容: 下面是我的AutoIt脚本(UI3_Authentication.au3),用于处理Windows身份验证弹出窗口。 以下是我对上述AutoIt exe文件的Selenium代码调用。 当我运行上述Selenium文件时,它将打开页面并弹出身份验证。但这不是在插入用户名和密码。它等待用户输入。 问题答案: 我解决了 其实这是我的坏事。以前,我的代码是这样的: 我在get()之前添加了a

  • 如何在处理正文请求之前验证身份验证? 我正在使用vertx: 我想在处理正文请求之前验证身份验证。但我得到了错误的java。lang.IllegalStateException:请求已被读取 使用暂停功能上的延迟复制: 当运行delay(100)时(这是验证过程的示例),我得到了上面的错误。如果我对延迟(100)进行注释,它可以正常工作。

  • 我试图将用于需要基本HTTP身份验证的第三方服务。我正在使用。以下是我到目前为止的结论:

  • 问题内容: 我的Web服务器托管在具有基本身份验证的Apache Tomcat 7中。我有Tomcat用户“ tomcat”,角色为“ tomcat”,密码为“ tomcat”。以下分别是我在客户端的web.xml文件和脚本片段。 Web.xml 客户端脚本: 我很确定Web服务和基本身份验证没有问题。但是从客户端脚本中,没有发送身份验证标头。我也尝试过 但是请求发送时没有身份验证头。任何帮助将不

  • 问题内容: C#中基于Selenium Webdriver的测试必须使用Windows身份验证登录。 我尝试了几种方法: 和 都不成功。我没有在本地系统上获得Windows身份验证对话框,因此无法查看源来确定如何使用Selenium By方法定位用户名和密码。 我相信Windows身份验证对话框是由浏览器提供的,但是我没有找到该对话框的任何来源。 使用Selenium(不是AutoIt或其他类似工