我正在做一个项目,在这个项目中,用户可以使用电话号码、谷歌或Github登录。我使用Firebase进行身份验证。我目前正在使用Cypress添加集成测试。我的问题是我无法正确测试用户是否可以链接或取消链接提供商。要链接提供者,我使用linkWithRedirect()
firebase方法
起初,我试图模拟一次按钮点击。但这不起作用,因为Cypress不允许在一个测试中访问多个域
我的下一次尝试是使用linkWithCredential()
方法。我从开发者工具中获取cookies和提供者的auth URL,以获取授权代码,并使用此代码获取访问令牌
获取Google令牌的My Cypress命令:
Cypress.Commands.add(
'getGoogleToken',
() => {
cy.request({
url: Cypress.env("GOOGLE_AUTH_URL"),
headers: {
cookie: Cypress.env("GOOGLE_AUTH_COOKIE")
},
followRedirect: false
})
.its("redirectedToUrl")
.then(redirectedToUrl => {
const url = new URL(redirectedToUrl);
const code = url.searchParams.get("code");
cy.request({
url: "https://www.googleapis.com/oauth2/v4/token",
method: "POST",
form: true,
body: {
code,
redirect_uri: Cypress.env("GOOGLE_REDIRECT_URI"),
client_id: Cypress.env("GOOGLE_CLIENT_ID"),
client_secret: Cypress.env("GOOGLE_CLIENT_SECRET"),
grant_type: "authorization_code"
}
})
.its("body")
.then(body => body.access_token);
});
});
使用这个令牌,我调用我自己的LinkBackGoogleBackToken
方法,该方法调用LinkBackCredential
方法:
Cypress.Commands.add(
'linkWithGoogle',
() => {
cy.getGoogleToken()
.then(token => {
cy.get("@auth")
.invoke("linkWithGoogleWithToken", token);
});
});
在我的测试中,我调用几个函数来链接一个提供者,然后链接另一个提供者,然后取消链接提供者,依此类推。有时此命令按预期工作,但有时它永远处于挂起状态。我不知道为什么。搜索没有帮助,似乎没有人遇到过这个问题
所以,我正在寻找以编程方式链接OAuth提供程序的方法,而不是使用UI。我正在考虑Firebase Admin SDK,但在其文档中找不到链接提供程序的方法。如果有人遇到这个问题,我将不胜感激。
我发现了我为什么会有这个问题。关键是,在访问该页面后,我添加了一个别名来引用我的firebase函数:
Cypress.Commands.add(
'init',
() => {
cy.visit("/");
cy.window()
.its("firebase")
.its("auth").as("auth");
cy.nullifyUsername();
});
第一次调用invoke
方法时,一切正常。然后我重新加载了页面,因为我需要用这些信息更新页面。
cy.linkGoogle();
cy.reload();
cy.get("@googleButton")
.contains(/^unlink$/i);
之后,下次我尝试链接另一个提供者时,invoke方法仍处于挂起状态。这是因为在重新加载页面后,我的别名被引用到一个不再存在的函数。我的解决方案是在重新加载页面后添加别名。因此,我为此创建了自定义命令:
Cypress.Commands.add(
'refresh',
() => {
cy.reload();
cy.window()
.its("firebase")
.its("auth").as("auth");
});
我想知道是否有人试图使用jmeter测试gRPC应用程序。 我希望 我可以使用非阻塞/异步存根编写一个gRPC客户端类,该存根对服务器进行非阻塞调用, 创建上述客户端的Jar 将Jar导入JMeter 使用Jeter BeanShell采样器中的Java方法 在花时间尝试上述方法之前,我想看看是否有人尝试过类似的方法 如果上述解决方法有效? 每个线程会创建一个单独的传输控制协议吗? 我们已经用py
我的目标是以我的技能使用OAuth访问令牌读取/管理用户日历(Google/Microsoft/Apple)。如果只有一个帐户,我可以这样做。然而,我想让用户选择不同的账户(谷歌/微软/苹果)。我相信我们可以使用OAuth隐式授权类型来实现这一点。但我想使用OAuth'Auth Grant Type',它提供刷新令牌。因此,我不想要求用户在访问令牌过期时(1小时)再次链接帐户。有可能做到这一点吗?
我有一个可以工作的DM命令,但如果我尝试DM一个关闭了DMs的人,会给出以下错误: 我如何让它检查用户是否打开了DMs?
问题内容: 我想链接异步的REST服务调用,并在完成时具有单个回调。 番石榴有可能吗? 问题答案: 您可以将s 用于链接: 在终端中以上代码的输出:
问题内容: 所以基本上我想用OAuth 2.0保护我的API,并实现一个OAuth Provider来启用对accessTokens的获取。 开箱即用可以完成JOAuth吗? 是否有人已经使用开源库(Java)实现了类似的东西? 问题答案: Spring Security的OAuth子项目支持OAuth 1.0a和OAuth2(客户端和服务器)。他们在GitHub存储库上有示例代码: 主要仓库:h
问题内容: 我熟悉Spring Boot JSP示例应用程序 但是该示例使用包装。是否可以这样做? 我的目标是简化s 的结构。 问题答案: 正如@Andy Wilkinson所说,与JSP相关的局限性。请打包您的应用程序,并以身份执行。在春季现场有记录。 对于Tomcat,如果使用war打包,它应该可以工作,即可执行的war将可以工作(…)。 由于Tomcat中的硬编码文件模式,可执行的jar将无