天道酬勤,学无止境

为什么 Google 表单不会在 formSubmit 上返回用户响应?(Why Google Forms does not return user response on formSubmit?)

问题

我创建了一个示例 google 表单,并定义了如下函数:

function onFormSubmit(e) {
  Logger.log('Inside function');
  Logger.log('Emailing data row ->');

  var itemResponses = e.getItemResponses();
  var email = itemResponses[0].getResponse();
  Logger.log(itemResponses);
}

Edit-> Current project's triggers中,我添加了要在表单提交时调用的函数:

My Executions部分中,我看到以下错误:

TypeError:无法调用未定义的方法“getItemResponses”。 在 onSubmit(代码:7)

为什么会这样? 我应该如何捕获表单字段? 我的代码或某些权限有问题吗?

回答1

您需要在 e 对象的 response 属性上调用 getItemResponses() 方法,而不是直接在 e 对象上调用。

代替:

  var itemResponses = e.getItemResponses();

和:

  var itemResponses = e.response.getItemResponses();
回答2

Google Forms中似乎存在一个错误,该错误仅发生在新创建的表单上:

  • 表单提交时的 Google 表单脚本 - 事件没有 FormResponse

建议2个解决方法:

1) 在代码中的某处包含对 FormApp 的调用,即使在注释中也是如此。 例如:

// FormApp.getActiveForm();

2) 按照以下说明将范围添加到您的 Apps 脚本清单文件中:

https://developers.google.com/apps-script/concepts/scopes#setting_explicit_scopes

添加的范围是“https://www.googleapis.com/auth/forms”

完成这两个选项中的任何一个后,重新授权您的脚本。 您可以在脚本编辑器中运行任何函数来执行此操作。

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • 将 Google 表单中的初始时间戳附加到记录末尾,以便在 FormSubmit 上永久存储创建日期(Appending initial timestamp from Google Form to end of record in order to permanently store create date onFormSubmit)
    问题 我需要能够存储(通过附加到记录)谷歌表单响应的创建日期,其中在编辑表单时初始时间戳不会被覆盖。 此表单托管在 Google 上,并且位于 Google Apps for Business 环境中。 此信息存在但在某些时候会在表单更新时转储。 似乎这对使用 Google 表单的人有广泛的应用,这些表单在创建后出于分析目的而进行编辑。 这个 Google Docs Forum 解释了一种与我非常相似的情况,但没有包含他们使用的代码。 我已经浏览了 google 开发人员网站,并确定我应该实现此功能的最佳方法是在响应电子表格上使用 onFormSubmit 触发器而不是表单本身,因为我要引用的字段(时间戳)直到写入谷歌工作表,因为无论如何我想将结果存储在电子表格的新列中。 我尝试参考这个解决方案并根据我的目的进行修改,因为它是我发现的最接近我试图解决的问题的代码片段。 下面是我注释的代码。 虽然,有些事情我仍然需要解决,例如我的 if else 和我对 createDateColumn 的硬编码,但我能够在没有这些的情况下运行它(使用链接到电子表格的 Google App Script 中的运行菜单)但是它应该写入的单元格由于某种原因,脚本执行后的时间戳现在具有“范围”值,因此我认为我设置的值不正确。 我还尝试在表单中添加一个新条目,但是 onFormSubmit 没有自行执行
  • 如何检查当前提交的表单是否正在编辑响应 [重复](How to check if current form submission is editing response [duplicate])
    问题 这个问题在这里已经有了答案: 如何检查当前提交的是编辑回复还是新回复(2 个回答) 7 个月前关闭。 我需要返回已重新提交的 Google 表单提交的行号。 我遵循了以下所有信息:Google Forms App Script : How to check if current submit is edit response or a new response,但我收到触发 formSubmit 的错误: 例外:无法将“15.0”转换为 int。 因此,它正确地找到了编辑过的第 15 行,并且似乎给了我一个数字,但是当我尝试使用该数字时,我不断收到错误消息。 我尝试使用+num , Number()将其转换,将行 # 放入一个单元格并手动更改格式,然后使用脚本和公式将其复制到另一个单元格,但是当formSubmit发生时我仍然继续收到此错误。 你能帮我确定如何解决这个错误吗? function email(e) { var sh = SpreadsheetApp.getActiveSheet(); var ss = SpreadsheetApp.getActiveSpreadsheet(); var gid = sh.getSheetId().toString(); var last = ss.getLastRow(); var valueColumnLocation
  • 提交Google表单(Google Forms onsubmit)
    问题 如何引用默认的“提交”表单按钮将“ onsubmit”触发器与另一操作链接? 谢谢你。 例如,使用onsubmit, Logger.log('do something'); 回答1 一个没有。 表单服务不允许对该产品进行任何程序控制。 在此常规主题的问题跟踪器上有一个未解决的问题。 对其加注星标以进行“投票”,并接收更新。 但是,您不会迷路。 在接收表单响应的电子表格中,您可以添加带有可安装触发器的脚本,以触发“表单提交”。 从那里,您可以对提交的数据执行许多操作,包括根据需要进行日志记录...但是对表单本身则无济于事。 这些参考资料说明了触发器和事件。 使用特定于容器的可安装触发器了解事件 回答2 我没有将脚本添加到电子表格以接收来自表单的响应(如Mogsdad的回答),而是添加了一个由表单的“提交”按钮触发的脚本。 第1步:首先创建Google表单 步骤2:然后从菜单中,单击“工具”->“脚本编辑器” 步骤3:给您的函数起一个类似onSubmit()的名称 第4步:编写一些代码以发送类似这样的电子邮件,然后通过单击“运行”按钮进行测试 function onSubmit() { MailApp.sendEmail("fred@email.com,alice@email.com", "Subject", "A new application has been
  • 使用表单 ID 打开表单时,无法在绑定到工作表的 Google Apps 脚本上调用未定义的方法“getEditResponseUrl”(Cannot call method "getEditResponseUrl" of undefined on Google Apps Script bound to Sheet when opening form using form ID)
    问题 我有这个功能,但它得到了所有的响应。 function setEditUrl(ss, createDateColumn) { var formURL = 'https://docs.google.com/forms/d/101bMiRw9TQaGbdDc4U_tLAD0QzicqejM9qXOEwJPQKU/viewform'; var urlColumn = createDateColumn-2; var data = ss.getDataRange().getValues(); var form = FormApp.openByUrl(formURL); for(var i = 2; i < data.length; i++) { if(data[i][0] != '' && data[i][urlColumn-1] == '') { var timestamp = data[i][0]; var formSubmitted = form.getResponses(timestamp); if(formSubmitted.length < 1) continue; var editResponseUrl = formSubmitted[0].getEditResponseUrl(); ss.getRange(i+1, urlColumn).setValue
  • 在离开网页之前进行未保存的更改之前警告用户(Warn user before leaving web page with unsaved changes)
    问题 我的应用程序中有一些带有表单的页面。 如何以某种方式保护表单,如果有人导航或关闭浏览器选项卡,则应提示他们确认他们确实要保留未保存的数据? 回答1 简短错误的答案: 您可以通过处理beforeunload事件并返回一个非null的字符串来做到这一点: window.addEventListener("beforeunload", function (e) { var confirmationMessage = 'It looks like you have been editing something. ' + 'If you leave before saving, your changes will be lost.'; (e || window.event).returnValue = confirmationMessage; //Gecko + IE return confirmationMessage; //Gecko + Webkit, Safari, Chrome etc. }); 这种方法的问题在于,提交表单也会触发unload事件。 通过添加要提交表单的标志,可以轻松解决此问题: var formSubmitting = false; var setFormSubmitting = function() { formSubmitting = true; }
  • Angular 4:反应式表单控件使用自定义异步验证器卡在挂起状态(Angular 4: reactive form control is stuck in pending state with a custom async validator)
    问题 我正在构建一个 Angular 4 应用程序,它需要对多个组件中的表单字段进行 BriteVerify 电子邮件验证。 我正在尝试将此验证实现为可以与响应式表单一起使用的自定义异步验证器。 目前,我可以得到 API 响应,但控制状态卡在挂起状态。 我没有收到任何错误,所以我有点困惑。 请告诉我我做错了什么。 这是我的代码。 成分 import { Component, OnInit } from '@angular/core'; import { FormBuilder, FormGroup, FormControl, Validators } from '@angular/forms'; import { Router } from '@angular/router'; import { EmailValidationService } from '../services/email-validation.service'; import { CustomValidators } from '../utilities/custom-validators/custom-validators'; @Component({ templateUrl: './email-form.component.html', styleUrls: ['./email-form.component
  • 如果谷歌地图地理编码未返回,则在 N 秒后设置计时器以提交表单(Setting a timer after N seconds to submit form if google maps geocode doesn't return)
    问题 我的搜索框中有一个地点自动完成对象。 var navbarAutocomplete = new window.google.maps.places.Autocomplete(navbarInput, navbarOptions); 我还有一个“place_changed”的侦听器事件,我调用 maps.geocoder 对字符串进行搜索,如果自动完成没有任何结果。 我担心的是,如果地理编码永远不会返回(例如,链接已关闭),我就无法调用表单提交。 问题 - 我是否应该设置一个计时器,以便在一段时间后,如果地理编码结果没有回来,我可以超时并调用表单提交? 如果是这样,我会怎么做? 我担心的是,如果我超时调用表单提交,即 1 次调用,然后地理编码结果返回并提交,即 2 2 次调用。 这是我的事件侦听器。 google.maps.event.addListener(navbarAutocomplete, 'place_changed', function() { var searchedPlace = navbarAutocomplete.getPlace(); if (searchedPlace.geometry === undefined) { $("#latitude").val(searchedPlace.geometry.location.G); $("#longitude
  • 脚本在谷歌表单提交触发器上运行两次(Script runs twice on google form submit trigger)
    问题 我正在使用 sendFormByEmail 函数创建 Google 表单和 google 应用程序脚本,我还为此功能设置了表单提交触发器,我的问题是此脚本在表单提交时运行两次,我收到两封电子邮件,我只想要一封电子邮件表单提交。 我的脚本代码如下。 var no_repeat=0; function sendFormByEmail(e){ var email = "test@XXXXDXtest.com"; var s = SpreadsheetApp.getActiveSheet(); var headers = s.getRange(1,1,1,s.getLastColumn()).getValues()[0]; var message = ""; var subject = "Success Assessment"; var total=0; var roll_on=0; message+="test massage"; message+="<table cellpadding='3' style='color: #0F1F4C;'>"; for(var i in headers) { if(headers[i]=='Please enter your email address to receive your results'){ email=e.namedValues
  • Google Apps 脚本:Sheets 表单数据操作,如果某些单元格为空,则删除行,同时保留某些列(Google Apps Script: Sheets Forms Data Manipulation, Deleting Rows if Certain Cells are Blank, while Maintaining Certain Columns)
    问题 这个问题是以下问题的延续:Google Apps 脚本:如果某些单元格为空白,表格表单数据操作和删除行 我有一张“表单回复”表,用户可以在其中最多填写 5 次相同的问题。 以下代码将在“粘贴值”表中逐行组织这些行。 除此之外,我还尝试按时间戳列按升序对列进行排序(以便来自 google 表单的新回复将显示在顶部)。 第一个问题是我的粘贴值表(A、O、P、Q、R、S)中有其他列不在我的表单表中。 当一个新表单进入顶部时,这些列中的信息不会随它们应该在的正确行一起移动; 他们只是呆在原地。 与此有关的第二个问题是,如果我尝试添加一个 On Form Submit 触发器,以便每次提交新表单时都会更新 Paste Values 表,则行将从头到尾累积 例如,如果我有: 第 1 行第 2 行第 3 行然后提交了一个新表单,它变成了: 第 1 行第 2 行第 3 行第 1 行第 2 行第 3 行第4行 这会导致我不想要的行重复。 我的最终目标是实现以下目标: 1) 每次有人提交新表格时,答案都会排在最前面; 在“表单响应”和“粘贴值”中,所有内容都按升序排序(按时间戳列) 2)添加一个编辑触发器,以便每次用户提交表单时,只有新行被添加到“粘贴值”,而不是一遍又一遍地复制所有行 3) 列:A、O、P、Q、R、S 和 T 是我希望能够在“粘贴值”中自由编辑的列,这意味着每次向“粘贴值
  • reCAPTCHA 之前的 HTML5 表单验证(HTML5 form validation before reCAPTCHA's)
    问题 我集成了新的隐藏 reCAPTCHA (v2) 框架,该框架默认使用提交按钮的click事件验证用户。 但是这个事件是在内置的 HTML5 表单验证之前触发的。 我正在寻找一种按预期顺序进行的方法:首先进行表单验证,然后进行 reCAPTCHA。 回答1 由于新的 v2 grecaptcha方法: grecaptcha.execute() ,您必须以编程方式执行此操作,以便 recaptcha 不会替换阻止默认 HTML5 表单验证的按钮的默认单击事件。 事件路径为: 提交按钮点击事件:浏览器内置表单验证表单提交事件:调用grecaptcha.execute() reCAPTCHA 回调:提交表单 $('#form-contact').submit(function (event) { event.preventDefault(); grecaptcha.reset(); grecaptcha.execute(); }); function formSubmit(response) { // submit the form which now includes a g-recaptcha-response input } <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"
  • Server.Transfer与响应重定向(Server.Transfer Vs. Response.Redirect)
    问题 Server.Transfer和Response.Redirect什么区别? 每种都有哪些优缺点? 什么时候比另一个合适? 什么时候不合适? 回答1 Response.Redirect只是向浏览器发送一条消息(HTTP 302)。 Server.Transfer发生在浏览器不知道任何内容的情况下,浏览器请求一个页面,但是服务器返回了另一个的内容。 回答2 Response.Redirect()会将您发送到新页面,更新地址栏并将其添加到浏览器历史记录中。 在浏览器上,您可以单击返回。 Server.Transfer()不会更改地址栏。 你不能反击。 当我不希望用户看到我要去的地方时,我使用Server.Transfer() 。 有时在“正在加载”类型页面上。 否则,我将始终使用Response.Redirect() 。 回答3 简短地说: Response.Redirect只是告诉浏览器访问另一个页面。 Server.Transfer有助于减少服务器请求,保持URL不变,并且有一些小问题,可让您传输查询字符串和表单变量。 我发现并同意的一些东西(来源): Server.Transfer与之类似,它使用诸如Server.Transfer("WebForm2.aspx")类的语句将用户发送到另一个页面。 但是,该声明有许多明显的优点和缺点。 首先,使用Server
  • Google 表单 PayPal Express 集成(Google Forms PayPal Express Integration)
    问题 我正在为一家非营利组织工作,IT 预算为 0。 他们需要允许用户在 Google 表单上输入信息,然后收款。 我对该主题进行了大量研究,目前看来您只能在 Google 表单上添加超链接以链接到 PayPal。 但是,我想知道是否有某种方法可以将 PayPal Express Checkout javascript(https://developer.paypal.com/docs/integration/direct/express-checkout/integration-jsv4/add-paypal-button/)链接到Google 表单,因此它会使用交易 ID 和状态进行回调。 然后我将能够以某种方式将这些值插入到 Google 表单中。 关于如何集成的任何想法都会有所帮助。 我是一名开发人员,但不熟悉 Google 表单。 回答1 @user1330219 我同意你提到的问题:在与支付系统没有紧密集成的情况下,协调是否以及谁支付是首要问题。 谷歌表单用户经常遇到这个问题。 我最近研究了这个话题,最近写了一篇关于通过 Google 表单收款的所有可能选项以及这些选项的优缺点的文章。 在那里,我还为开发人员找到了几个选项: Google 开发人员专家 Alan Wells 的解决方案,用于使用客户端 PayPal Javascript SDK 和服务器端 PayPal
  • 为什么我的异步函数返回Promise { }而不是值?(Why is my asynchronous function returning Promise { <pending> } instead of a value?)
    问题 我的代码: let AuthUser = data => { return google.login(data.username, data.password).then(token => { return token } ) } 当我尝试运行这样的东西时: let userToken = AuthUser(data) console.log(userToken) 我越来越: Promise { <pending> } 但为什么? 我的主要目标是从google.login(data.username, data.password)获取令牌google.login(data.username, data.password)该令牌将promise返回到变量中。 然后才执行一些操作。 回答1 只要其结果尚未解决,promise将始终记录未决。 无论promise状态如何(已解决或仍处于待处理状态) .then您都必须在promise上调用.then来捕获结果: let AuthUser = function(data) { return google.login(data.username, data.password).then(token => { return token } ) } let userToken = AuthUser(data) console.log
  • Google reCAPTCHA 响应成功:false,无错误代码(Google reCAPTCHA response success: false, no error codes)
    问题 更新:谷歌最近更新了他们的错误消息,增加了一个可能的错误代码:“超时或重复”。 这个新的错误代码似乎涵盖了我们之前提到的 99% 的神秘案例。 我们仍然想知道为什么我们会收到那么多超时或重复的验证请求。 肯定地确定这一点可能是不可能的,但现在我只是希望其他人也经历过类似的事情。 免责声明:我将此内容交叉发布到 Google 网上论坛,因此对于经常访问这两个网站的人发送垃圾邮件,我深表歉意。 我目前正在处理一个页面,作为 ASP.Net MVC 应用程序的一部分,其中包含一个使用 reCAPTCHA 验证的表单。 该页面目前有很多日常用户。 在我对 reCAPTCHA 响应的服务器端验证**中,一段时间以来,我已经看到 reCAPTCHA 响应的成功属性设置为 false,但伴随着空错误代码数组的情况。 大多数请求都通过了验证,但有些请求仍然表现出这种模式。 所以在网上做了一些研究之后,我探索了我能想到的两种可能的情况: 验证已超时,不再有效。 用户已经使用响应值进行了验证,因此他们第二次被拒绝。 在收集了一段时间的数据后,我发现所有“成功:错误,错误代码:[]”的情况要么验证很旧(从 5 分钟到 10 天(!)),要么已经重用响应值的情况,或者有时是两者的组合。 即使在实现客户端防止双击我的提交表单按钮之后,很多重复提交似乎仍然通过服务器端 Google reCAPTCHA
  • 为什么Google会优先使用while(1); 他们的JSON响应?(Why does Google prepend while(1); to their JSON responses?)
    问题 为什么Google会优先使用while(1); 他们的(私有)JSON响应? 例如,这是在Google日历中打开和关闭日历时的响应: while (1); [ ['u', [ ['smsSentFlag', 'false'], ['hideInvitations', 'false'], ['remindOnRespondedEventsOnly', 'true'], ['hideInvitations_remindOnRespondedEventsOnly', 'false_true'], ['Calendar ID stripped for privacy', 'false'], ['smsVerifiedFlag', 'true'] ]] ] 我认为这是为了防止人们对它执行eval() ,但是您真正要做的就是替换while ,然后再进行设置。 我认为评估的目的是确保人们编写安全的JSON解析代码。 我已经看到了这个用在其他几个地方也一样,但很多更使谷歌(邮件,日历,联系人等),奇怪的是,谷歌文档开头&&&START&&& ,而是和谷歌联系人似乎开始与while(1); &&&START&&& while(1); &&&START&&& 。 这里发生了什么? 回答1 它可以防止JSON劫持,这是自2011年以来使用ECMAScript
  • HtmlService 无法从 doPost() 工作 - 需要可编写脚本的异步替代方案(HtmlService not working from doPost() - scriptable async alternative wanted)
    问题 我想使用带有 HtmlService 的 doPost() 作为异步调度程序来调用其他函数。 异步功能对性能很重要——不必同步等待电子表格操作完成,这就是 HtmlService 的用途。 这是我在代码方面的内容: function doGet(e) { var app = UiApp.createApplication(); var button = app.createButton('Click Me'); app.add(button); var handler = app.createServerHandler('myClickHandler'); button.addClickHandler(handler); return app; } function myClickHandler(){ sendHttpPostSelf(); } function doSomething() { Logger.log('I was called Now!'); return; } function sendHttpPostSelf() { var payload = { "name" : "name", "comment" : "comment", "screenshot" : "screenshot" }; var options = { "method" : "post"
  • 确保表单提交触发器只运行一张纸(Ensure form submission trigger runs only one sheet)
    问题 我在一个特定的电子表格中有两张工作表,这两张工作表都有与之相关的表单提交。 第一个表单/表单应该发送一封包含表单提交数据的电子邮件(原件由 Amit Agarwal 创建,这是一个历史链接)。 第二个表单/工作表没有做任何特别的事情,因为它只是从表单中收集数据。 有问题的脚本设置为表单提交触发器。 我遇到的问题是脚本有时从 form/sheet2 运行。 我想指定脚本需要从哪个工作表/表单触发才能运行。 我创建的修改后的代码是基于大量的环顾四周。 这是片段: function Initialize() { var triggers = ScriptApp.getProjectTriggers(); for (var i in triggers) { ScriptApp.deleteTrigger(triggers[i]); } ScriptApp.newTrigger("SendConfirmationMail") .forSpreadsheet(SpreadsheetApp.getActiveSpreadsheet()) .onFormSubmit() .create(); } function SendConfirmationMail(e) { try { var ss, bcc, sendername, subject, columns; var message
  • Google ReCaptcha 未发布“g-recaptcha-response”(Google ReCaptcha not posting 'g-recaptcha-response')
    问题 以前曾问过这个问题:新的 Google ReCaptcha 未发布/接收“g-recaptcha-response” - 但没有正确的答案。 我和他的设置完全一样,但代码在这里失败了: if(!$captcha){ exit; } 所以$captcha=$_POST['g-recaptcha-response']似乎是空的。 带有复选框服务器端 php 的新 google recaptcha = 这里的第二个答案似乎也不起作用。 有谁知道为什么会发生这种情况? 回答1 我遇到了这个问题,发现我的表单在 DOM 中过早关闭,因为它在一个表中。 ReCaptcha 设置一个 display:none g-recaptcha-response textarea,然后在您完成验证码时填写数据。 它似乎在寻找 div 所在形式的孩子,因此找不到它最初创建的 g-recaptcha-response。 我把表格放在桌子周围,之后它工作得很好。 回答2 检查在向用户显示表单的部分中是否存在以下内容: <form>和</form> : <div class="g-recaptcha" data-sitekey="your_public_key"></div> 在结束</head>标签之前: <script src='https://www.google.com/recaptcha/api
  • 在 ASP.NET MVC 中使用 reCAPTCHA(Using reCAPTCHA with ASP.NET MVC)
    问题 我在我的 WebForms 应用程序中多次使用 reCAPTCHA。 现在我想将它添加到 ASP.NET MVC 应用程序中。 我在 RecaptchaControlMvc 中发现了一些看起来不错的代码,但令人难以置信的是,我无法找到有关如何使用此控件的单个段落或示例。 我已经在 Google reCAPTCHA 组中发帖了,但它已经死了。 任何人都可以向我指出使用此控件的示例、有关如何使用它的段落或建议替代方法吗? 注意:我知道在 stackoverflow 上有类似的问题,但我发现没有一个讨论如何使用此控件。 回答1 这里有一些代码 您可以像这样添加属性: [CaptchaValidator] [AcceptVerbs( HttpVerbs.Post )] public ActionResult SubmitForm( Int32 id, bool captchaValid ) { .. Do something here } 您在视图中呈现验证码: <%= Html.GenerateCaptcha() %> 这是这样的: public static string GenerateCaptcha( this HtmlHelper helper ) { var captchaControl = new Recaptcha.RecaptchaControl { ID =
  • 使用 URLFetchApp 尝试进行身份验证的 Google 表单自动提交(Google Form Autosubmit using URLFetchApp attempting to authenticate)
    问题 我有一个 GAS 应用程序,它从现有工作表中读取行,将数据格式化为与我拥有的表单的“预填充”URL 匹配的 URL,并尝试使用 URLFetchApp.fetch() 自动提交表单数据到我拥有的响应表。 格式化后的 URL 如下所示(已删除 ID): https://docs.google.com/a/mycompany.com/forms/d//formResponse?pli=1&ifq&entry.887301985&entry.902886422=Account+Name&entry.2050597172=ContactName&entry.491359461.85ModelName1&entry&entry&entry&entry=77878787878886787887878787870001 .551688184=SRNo&submit=提交”; 直到最近几周,此应用程序运行良好。 现在,它返回一个 HTTP 200 响应,但数据不会(通常)写入响应表。 我说“通常”是因为每隔一段时间它就会起作用。 HTTP 响应的响应内容,当保存到文档并在浏览器中打开时,是一个 Google Apps 身份验证页面,但是当我拥有所有相关组件时,我无法弄清楚为什么它要对我进行身份验证。 此外,1) 尝试使用此页面登录时会出现一个错误,即我的浏览器中禁用了 cookie