GVKun编程网logo

在 firebase 云函数中使用 express `app.get()` 访问文件

1

关于在firebase云函数中使用express`app.get()`访问文件的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于ActionController::RoutingError没

关于在 firebase 云函数中使用 express `app.get()` 访问文件的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于ActionController :: RoutingError没有路由与[GET]“ / vendor / assets / stylesheets / bootstrap.min.css”匹配 app / assets / stylesheets / application.css: app / assets / javascript / application.js: app / views / layout / application.html.erb: app / j、Android 上的 Flutter/Firebase verifyPhoneNumber() 总是调用 recaptcha“验证你不是机器人” 作为 Firebase verifyPhoneNumber() 流程的一部分,Android 需要什么配置以及在哪里进行配置才能停止重新验证?我已验证以下内容:Firebase 中发生了一些变化,但我找不到任何说明如何在 Android 上为 Firebase verifyPhoneNumber() 克服 recaptcha 的文档、angular – ng new hello错误:路径“/app/app.module.ts”不存在.路径“/app/app.module.ts”不存在、app.use(express.static(__dirname + '/public')) 和 app.use(express.static('public')) 的区别;等相关知识的信息别忘了在本站进行查找喔。

本文目录一览:

在 firebase 云函数中使用 express `app.get()` 访问文件

在 firebase 云函数中使用 express `app.get()` 访问文件

如何解决在 firebase 云函数中使用 express `app.get()` 访问文件

我尝试将 Firebase 托管与 Firebase 函数结合使用,以便只有拥有有效 Firebase 令牌的用户才能访问 .html-content。

在访问 Firebase 托管时,我能够在我的 iOS 应用程序中发送令牌,并且我的云函数被调用并成功解码令牌(我在 Firebase 函数日志中看到“ID 令牌正确解码”)。>

之后应该打开 index.html,它位于我的 /functions 文件夹的子文件夹 (/myhomepage) 中(所以不在“/public”中)。

我的应用程序浏览器中总是出现错误:“无法获取/”

Firebase-Functions-Log 说:“函数执行耗时 1654 毫秒,完成状态代码:404”

index.js 里面的代码:

const admin = require("firebase-admin");
const functions = require(''firebase-functions'');
const express = require(''express'');
const cookieParser = require(''cookie-parser'')();
const cors = require(''cors'')({origin: true});
const app = express();

admin.initializeApp();

let db = admin.firestore();

// Express middleware that validates Firebase ID Tokens passed in the Authorization HTTP header.
// The Firebase ID token needs to be passed as a Bearer token in the Authorization HTTP header like this:
// `Authorization: Bearer <Firebase ID Token>`.
// when decoded successfully,the ID Token content will be added as `req.user`.
const validateFirebaseIdToken = async (req,res,next) => {
  functions.logger.log(''Check if request is authorized with Firebase ID token'');

  if ((!req.headers.authorization || !req.headers.authorization.startsWith(''Bearer '')) &&
      !(req.cookies && req.cookies.__session)) {
    functions.logger.error(
      ''No Firebase ID token was passed as a Bearer token in the Authorization header.'',''Make sure you authorize your request by providing the following HTTP header:'',''Authorization: Bearer <Firebase ID Token>'',''or by passing a "__session" cookie.''
    );
    res.status(403).send(''Unauthorized'');
    return;
  }

  let idToken;
  if (req.headers.authorization && req.headers.authorization.startsWith(''Bearer '')) {
    functions.logger.log(''Found "Authorization" header'');
    // Read the ID Token from the Authorization header.
    idToken = req.headers.authorization.split(''Bearer '')[1];
  } else if(req.cookies) {
    functions.logger.log(''Found "__session" cookie'');
    // Read the ID Token from cookie.
    idToken = req.cookies.__session;
  } else {
    // No cookie
    res.status(403).send(''Unauthorized'');
    return;
  }

  try {
    const decodedIdToken = await admin.auth().verifyIdToken(idToken);
    functions.logger.log(''ID Token correctly decoded'',decodedIdToken);
    req.user = decodedIdToken;
    next();
    return;
  } catch (error) {
    functions.logger.error(''Error while verifying Firebase ID token:'',error);
    res.status(403).send(''Unauthorized'');
    return;
  }
};

app.use(cors);
app.use(cookieParser);
app.use(validateFirebaseIdToken);
app.get(''/myhomepage'',(req,res) => { // <-- The problem seems to be here
    functions.logger.log(''Calling get.''); // This line does not get called in my log.
    res.status(200).sendFile(''/index.html'');
});

exports.myfunction = functions.https.onRequest(app);

令牌成功解码后如何访问“/functions/myhomepage”中的内容?

解决方法

通常,您只能以 send()redirect()end() 结束 HTTP 函数,请参阅 doc。

我从未尝试过,但我认为使用 sendFile() 行不通。如果您想将用户重定向到通过 Firebase 托管可用的静态页面,您应该使用 redirect()。另一种可能性是将 HTML 字符串传递给 send() 方法,请参阅 here。

ActionController :: RoutingError没有路由与[GET]“ / vendor / assets / stylesheets / bootstrap.min.css”匹配 app / assets / stylesheets / application.css: app / assets / javascript / application.js: app / views / layout / application.html.erb: app / j

ActionController :: RoutingError没有路由与[GET]“ / vendor / assets / stylesheets / bootstrap.min.css”匹配 app / assets / stylesheets / application.css: app / assets / javascript / application.js: app / views / layout / application.html.erb: app / j

如何解决ActionController :: RoutingError没有路由与[GET]“ / vendor / assets / stylesheets / bootstrap.min.css”匹配 app / assets / stylesheets / application.css: app / assets / javascript / application.js: app / views / layout / application.html.erb: app / j

我正在Rails上执行此应用程序,页面加载正常,但在控制台中显示:

Started GET "/vendor/assets/stylesheets/bootstrap.min.css" for ::1 at 2020-08-17 09:09:51 -0500

Started GET "/vendor/assets/javascripts/bootstrap.min.js" for ::1 at 2020-08-17 09:09:51 -0500
ActionController::RoutingError (No route matches [GET] 
"/vendor/assets/stylesheets/bootstrap.min.css"):
ActionController::RoutingError (No route matches [GET] 
"/vendor/assets/javascripts/bootstrap.min.js"):

在我的供应商文件夹中,我同时拥有文件夹,javascript和样式表,并分别位于各自的bootsrtrap.min中。 即使在application.html.erb中,我也有以下内容:

  <link href="vendor/assets/stylesheets/bootstrap.min.css" rel="stylesheet">
  <%= csrf_Meta_tags %>
  <%= stylesheet_link_tag    ''application'',media: ''all'',''data-turbolinks-track'': ''reload'' %>
  <%= javascript_include_tag ''application'',''data-turbolinks-track'': ''reload'' %>

</head>
<body>

  <!-- Navigation -->
  <nav>
    <div>
      <ahref="#">Instagram Clone</a>
      <buttontype="button" data-toggle="collapse" data-target="#navbarResponsive" aria-controls="navbarResponsive" aria-expanded="false" aria-label="Toggle navigation">
        <span></span>
      </button>
      <divid="navbarResponsive">
        <ul>
          <li>
            <ahref="#">Home
              <span>(current)</span>
            </a>
          </li>
          <li>
            <ahref="#">About</a>
          </li>
          <li>
            <ahref="#">Services</a>
          </li>
          <li>
            <ahref="#">Contact</a>
          </li>
        </ul>
      </div>
    </div>
  </nav>

  <!-- Page Content -->
  <div>
    <div>
      <div>
        <%= yield %>
      </div>
    </div>
  </div>

  <!-- Bootstrap core JavaScript -->
  <!--<script src="vendor/jquery/jquery.slim.min.js"></script>-->
  <script src="vendor/assets/javascripts/bootstrap.min.js"></script>
    
</body>
</html>

在js和CSS这两个应用程序文件中,我都放置了“ require bootsrtrap.min”,即使该错误仍然出现在控制台中。 会是什么?

解决方法

RoR不使用目录作为文件夹结构指示。因为有资产装载者。您应该将5s或更少的css导入application.css中,并将js导入application.js中。并使用自己的助手添加捆绑文件:

1。用纱安装靴子

yarn add bootstrap @popperjs/core jquery

npm i bootstrap @popperjs/core jquery

栏位不超过5

2。在Assets Pipeline中导入文件

app / assets / stylesheets / application.css:

//...
require bootstrap/dist/css/bootstrap.min
//...

但是,如果需要,我建议使用SCSS并仅导入所需的样式。

app / assets / javascript / application.js:

//...
//= require jquery
//= require @popperjs/core
//= require bootstrap/dist/js/bootstrap.min
//...

3。在布局中导入资产

app / views / layout / application.html.erb:

<head>
...
  <%= stylesheet_link_tag ''application'',media: ''all'' %>
</head>
<body>
...
  <%= javascript_include_tag ''application'' %>
</body>

使用webpack滚动6

2。在application.scss和application.js中导入Bootstrap

app / javascript / stylesheets / application.scss:

//...
import ''bootstrap''
//...

app / javascript / packs / application.js:

import ''jquery''
import ''popper.js''
import ''bootstrap''
import ''../stylesheets/application''

3。在布局中导入捆绑包

<head>
...
  <%= stylesheet_pack_tag ''application'',media: ''all'',''data-turbolinks-track'': ''reload'' %>
  <%= javascript_pack_tag ''application'',''data-turbolinks-track'': ''reload'' %>
</head>

之后,您应该可以在所有应用程序中使用引导程序!

,

[解决方案]因此,在我的HTML(application.html.erb)内部,我有两个对js和css文件的调用:

<script src="assets/javascripts/bootstrap.min.js"></script>
  <%= javascript_include_tag ''application'',''data-turbolinks-track'': ''reload'' %>       
<link href="assets/stylesheets/bootstrap.min.css" rel="stylesheet">
  <%= csrf_meta_tags %>
  <%= stylesheet_link_tag    ''application'',''data-turbolinks-track'': 
  ''reload'' %>

正如您在上面看到的那样,在使用javascript的情况下,我有一个使用脚本的调用,而另一个使用了的调用,两者都造成了问题,所以您只需要评论一个,我就对该脚本进行评论对于我的java文件和CSS文件,一个。 像这样:

  <!--<link href="assets/stylesheets/bootstrap.min.css" rel="stylesheet">-->
    <!--<script src="assets/javascripts/bootstrap.min.js"></script>-->

对我来说,解决了这个问题,我真的尝试了所有事情,这就是解决方案哈哈。

Android 上的 Flutter/Firebase verifyPhoneNumber() 总是调用 recaptcha“验证你不是机器人” 作为 Firebase verifyPhoneNumber() 流程的一部分,Android 需要什么配置以及在哪里进行配置才能停止重新验证?我已验证以下内容:Firebase 中发生了一些变化,但我找不到任何说明如何在 Android 上为 Firebase verifyPhoneNumber() 克服 recaptcha 的文档

Android 上的 Flutter/Firebase verifyPhoneNumber() 总是调用 recaptcha“验证你不是机器人” 作为 Firebase verifyPhoneNumber() 流程的一部分,Android 需要什么配置以及在哪里进行配置才能停止重新验证?我已验证以下内容:Firebase 中发生了一些变化,但我找不到任何说明如何在 Android 上为 Firebase verifyPhoneNumber() 克服 recaptcha 的文档

如何解决Android 上的 Flutter/Firebase verifyPhoneNumber() 总是调用 recaptcha“验证你不是机器人” 作为 Firebase verifyPhoneNumber() 流程的一部分,Android 需要什么配置以及在哪里进行配置才能停止重新验证?我已验证以下内容:Firebase 中发生了一些变化,但我找不到任何说明如何在 Android 上为 Firebase verifyPhoneNumber() 克服 recaptcha 的文档

作为 Firebase verifyPhoneNumber() 流程的一部分,Android 需要什么配置以及在哪里进行配置才能停止重新验证?

See screen recording.

在浏览器中的机器人验证打开之前,会记录:“SafetyNet Attestation Failed basic integrity”。

我已验证以下内容:

  1. 为我的项目启用了 Android 设备验证。然而,这没有任何作用。
  2. 删除了许多 SO 帖子建议的 Firebase Analytics 和其他依赖项,但仍然无济于事。
  3. 我已经添加了我的 SHA1,但也将我的 SHA256 添加到了 Firebase 项目设置。
  4. 为了排除我的应用程序中的某种依赖问题,我创建了一个全新的基本 Flutter 应用程序,除了 Firebase Core 和 Auth 之外,零依赖项以及 Flutter 中 Firebase 所需的典型设置。同样的事情发生 (screen recording)。
  5. 更新 - 此处可能的答案: The docs state:“reCAPTCHA 验证:如果无法使用 SafetyNet,例如当用户没有 Google Play 服务支持时,或者当在模拟器上测试您的应用程序时,Firebase 身份验证使用 reCAPTCHA 验证来完成电话登录流程。”我想它是根据文档工作的,但是有很多关于 SO 的帖子,用户声称他们即使在模拟器中也能够克服这个问题。

此应用未发布到 Google Play,仅在模拟器和物理 Android 设备上进行测试。

Firebase 中发生了一些变化,但我找不到任何说明如何在 Android 上为 Firebase verifyPhoneNumber() 克服 recaptcha 的文档。

recaptcha 返回后,codeSent 返回,其他 verifyPhoneNumber() 参数正常工作。

  1. await FirebaseAuth.instance.verifyPhoneNumber(
  2. phoneNumber: ''$_countryCode$_phoneNumber'',verificationCompleted:(PhoneAuthCredential credential) {
  3. print(''verificationCompleted'');
  4. },verificationFailed: (FirebaseAuthException e) {
  5. print(''verificationFailed'');
  6. },codeSent: (String verificationId,int resendToken) {
  7. print(''codeSent'');
  8. },codeAutoRetrievalTimeout: (String verificationId) {
  9. print(''codeAutoRetrievalTimeout'');
  10. },);

[

解决方法

自我上次使用以来,Firebase 电话身份验证已更新。

文档状态:

reCAPTCHA 验证:如果无法使用 SafetyNet,例如当用户没有 Google Play 服务支持时,或者在模拟器上测试您的应用时,Firebase 身份验证使用 reCAPTCHA 验证来完成手机登录流量。

在之前没有看到 reCAPTCHA 后看到它让我感到惊讶,所以我认为我的某些设置不正确。

只是一个很好的安全功能,可与 Firebase 电话身份验证无缝协作。

angular – ng new hello错误:路径“/app/app.module.ts”不存在.路径“/app/app.module.ts”不存在

angular – ng new hello错误:路径“/app/app.module.ts”不存在.路径“/app/app.module.ts”不存在

我在角度创建新项目时面临问题.
当我运行新的myapp命令时,我得到以下命令

新的你好

Error: Path "/app/app.module.ts" does not exist.
Path "/app/app.module.ts" does not exist.

谁能帮我吗???

解决方法

这是解决方案

Please make sure that your new folder have write permission

如果您使用的是ubuntu,请将以下命令运行到该文件夹

sudo chmod 644 -R foldername

然后运行新的appname

并检查您的节点版本

app.use(express.static(__dirname + '/public')) 和 app.use(express.static('public')) 的区别;

app.use(express.static(__dirname + '/public')) 和 app.use(express.static('public')) 的区别;

如何解决app.use(express.static(__dirname + ''/public'')) 和 app.use(express.static(''public'')) 的区别;?

不知道下面两个是不是一样的。

(1) app.use(express.static(__dirname + "/public"));
(2) app.use(express.static("public"));

因为我认为只要 (2) 存在于 express 服务器中,浏览器就可以提供位于根路径中的 public 文件夹,而 __dirname 不是必需的。

但是,有时 (2) 不起作用而 (1) 起作用,例如我在基于 Route parameters 的动态路由中呈现 ejs 文件。

它们之间到底有什么区别?

解决方法

首先__dirname有3个用法,你可以查看documentation:

制作新目录

要在 index.js 文件中创建一个新目录,请插入 __dirname 作为 path.join() 的第一个参数,并将新目录的名称作为第二个参数插入

const fs = require(''fs'');
const path = require(''path'');
const dirPath = path.join(__dirname,''/pictures'');

fs.mkdirSync(dirPath);

指向目录

另一个独特的功能是它能够指向目录。在你的 index.js 文件中,声明一个变量并传入 __dirname 的值作为 path.join() 的第一个参数,你的包含静态文件的目录作为第二个参数

express.static(path.join(__dirname,''/public''));

将文件添加到目录

您也可以将文件添加到现有目录。在你的 index.js 文件,声明一个变量并包含 __dirname 作为第一个参数 以及您要添加为第二个的文件 如果您运行 express 应用程序 从另一个目录(不是根目录),使用绝对路径更安全 在您要提供的目录中,使用 __dirname

const fs = require(''fs'');
const path = require(''path'');
const filePath = path.join(__dirname,''/pictures'');

fs.openSync(filePath,''hello.jpeg'');

根据您的示例,我们不能使用 __dirname 但如果您从另一个目录运行 express 应用程序,则使用您想要提供服务的目录的绝对路径会更安全

app.use(express.static(__dirname + "/public"));

今天的关于在 firebase 云函数中使用 express `app.get()` 访问文件的分享已经结束,谢谢您的关注,如果想了解更多关于ActionController :: RoutingError没有路由与[GET]“ / vendor / assets / stylesheets / bootstrap.min.css”匹配 app / assets / stylesheets / application.css: app / assets / javascript / application.js: app / views / layout / application.html.erb: app / j、Android 上的 Flutter/Firebase verifyPhoneNumber() 总是调用 recaptcha“验证你不是机器人” 作为 Firebase verifyPhoneNumber() 流程的一部分,Android 需要什么配置以及在哪里进行配置才能停止重新验证?我已验证以下内容:Firebase 中发生了一些变化,但我找不到任何说明如何在 Android 上为 Firebase verifyPhoneNumber() 克服 recaptcha 的文档、angular – ng new hello错误:路径“/app/app.module.ts”不存在.路径“/app/app.module.ts”不存在、app.use(express.static(__dirname + '/public')) 和 app.use(express.static('public')) 的区别;的相关知识,请在本站进行查询。

本文标签: