小编vic*_*tcu的帖子

Ionic 3谷歌登录

我正在尝试集成Ionic Google Plus原生插件,以允许用户使用Google登录通过手机登录我的应用.这只是这个Cordova/PhoneGap库的包装.

我想我一直都在那里.我的登录屏幕上有一个按钮,当我在Android手机上点击它时,我遇到了预期的"选择一个帐户"屏幕.但是,当我真正点击我的一个帐户并查看Chrome开发工具中发生的事情(通过远程调试)时,我发现出现了一个错误,用一个无用的堆栈跟踪表示为12500.

似乎有少数明星需要协调才能使其发挥作用,而且我不清楚如何在开发和生产模式下同时使用它.这是我检查的内容:

  • 在Google API&Services中=>凭据信息中心
    • 我有两个适用于Android的OAuth 2.0客户端ID,一个用于开发,一个用于生产.
    • 这两个配置都使用相同的Package名称,这是Android清单文件中的完全限定名称,名称以"com.blah.blah.blah"开头,它也是config.xml文件中的widget ID
    • 每个配置都使用不同的签名证书指纹,我使用keytool建立.
      • 对于Production,我从用于签署应用程序进行生产的密钥库文件生成SHA1指纹.
      • 对于开发,我通过提取由离子cordova运行android生成的调试APK,并在包含的META-INF/CERT.RSA文件上运行keytool来生成SHA1指纹.
  • 在Ionic项目的config.xml文件中
    • 我有一个看起来像这样的部分:
<plugin name="cordova-plugin-googleplus" spec="^5.3.2">        
    <variable name="REVERSED_CLIENT_ID" value="com.googleusercontent.apps.ABCDEFG-12345" />
    <variable name="WEB_APPLICATION_CLIENT_ID" value="ABCDEFG-12345.apps.googleusercontent.com" />
    <variable name="PLAY_SERVICES_VERSION" value="11.8.0" />
</plugin>
Run Code Online (Sandbox Code Playgroud)
  • 我一直在生产或开发独特的客户端ID部分上面替换ABCDEFG-12345,我没有看到一个明确的方法来支持两者,除了可能作为自定义构建步骤.

    • 在带有我的登录按钮的页面的Typescript中,现在,我只是这样做:
import { GooglePlus } from '@ionic-native/google-plus
...
constructor(public googlePlus: GooglePlus){}
...
login() {
  this.googlePlus.login({
    webClientId: 'ABCDEFG-12345.apps.googleusercontent.com',
    offline: false
  })
  .then(res => console.log(res))
  .catch(err => console.error(err));
}
Run Code Online (Sandbox Code Playgroud)
  • 再次在这里,将ABCDEFG-12345替换为那里的生产或开发唯一客户端ID部分,除了可能作为自定义构建步骤之外,我没有看到同时支持这两者的明确方法.

当我点击按钮时,我只是在开发模式下得到12500错误.我还没有尝试过生产模式.我错过了什么,我如何找到它的底部?

这里在github存储库中交叉发布问题.

更新:2018年11月7日 省略调用this.googlePlus.login的所有选项(即传递一个空对象,{})我没有收到错误,但是这个.googlePlus.login,我找回了一个用户对象作为回应.但是,我没有回复(至少在Android上)一个idtoken(我可以传递给我的服务器端代码).所以我的对象看起来像这样:

{
  accessToken: "XXXXXXXXXXX"
  displayName: "XXXXXXXXXXX"
  email: "XXXXXXXXXXX"
  expires: …
Run Code Online (Sandbox Code Playgroud)

android google-login ionic3

6
推荐指数
0
解决办法
1245
查看次数

Google课堂API对象身份验证

我在浏览器中成功使用Google Classroom API代表已授权使用Google客户端库通过OAuth2执行此操作的用户.我正在试图弄清楚如何信任从浏览器发送到我的服务器的API结果.这是一个故事,用于解释我试图解决的端到端问题.

  1. 用户X登录到使用谷歌登录,和我自己的网站保存用户的谷歌登录对象(这是在id_token的形式转移到我的服务器和解码,以确保在详细描述真实性这里)在我的数据库.该响应最终看起来像这个严重编辑的对象:

{
   "iss": "accounts.google.com",
   "azp": "redacted-string",
   "aud": "redacted-string",
   "sub": "redacted-string",
   "hd": "redacted-string",
   "email": "redacted-string",
   "email_verified": true,
   "at_hash": "redacted-string",
   "name": "redacted-string",
   "picture": "redacted-string",
   "given_name": "redacted-string",
   "family_name": "redacted-string",
   "locale": "en",
   "iat": redacted-number,
   "exp": redacted-number,
   "jti": "redacted-string"
}
Run Code Online (Sandbox Code Playgroud)

  1. 我想代表用户在Google Classroom中做一些事情,比如列表教室.因此,我要求通过Google提供的相应OAuth2工作流程向他们发送相同的权限.然后,在获得同意后,我会拨打所需的Google Classrooms API来列出教室,并收到一份教室列表,如下所示:

{
 "courses": [
  {
   "id": "redacted-number",
   "name": "redacted-string",
   "ownerId": "redacted-number",
   "creationTime": "2019-01-09T19:04:28.084Z",
   "updateTime": "2019-01-09T19:04:56.828Z",
   "enrollmentCode": "redacted-string",
   "courseState": "DECLINED",
   "alternateLink": "https://classroom.google.com/c/redacted-string",
   "teacherGroupEmail": "redacted-string",
   "courseGroupEmail": "redacted-string",
   "teacherFolder": {
    "id": "redacted-string"
   },
   "guardiansEnabled": false
  },
  {
   "id": "redacted-number",
   "name": …
Run Code Online (Sandbox Code Playgroud)

authentication google-api

6
推荐指数
1
解决办法
144
查看次数

Cypress Angular 什么时候可以开始测试?

我正在使用 Cypress 对我的 Angular 应用程序进行端到端测试。我观察到的一个片状来源是 Cypress 行动迅速,而我的应用程序(相对)较慢地准备好进行交互。Cypress 有一些经常被引用的博客 文章讨论了这个困境。

其中一篇博客文章中的示例建议劫持 addEventListener 来处理一个非常具体的示例。但我正在寻找的是适合 Angular 的“大锤”......任何人都有任何聪明的想法/技术,不涉及在进行测试活动之前为每个页面访问添加 10 秒的等待时间(顺便说一下确实有效) ? 我花了大量时间谷歌搜索无济于事。提前感谢您的想法!

旁白:我还发现了这个悬而未决的问题,如果它得到富有成效的解决可能是答案的一部分。

javascript testing angular cypress

6
推荐指数
2
解决办法
294
查看次数

亚马逊销售合作伙伴 API - 如何获取有关退款/退货的信息(亚马逊配送)

我成功使用亚马逊销售合作伙伴 API检索给定时间段内最后更新的订单和订单详细信息。我现在面临的挑战是确定给定订单是否已退回和/或退款。这些订单,就其价值而言,都是FBA(亚马逊配送)。我无法确定哪些 API 端点可能会向我提供该信息。让我有点惊讶的是,当订单被退回时,订单记录似乎没有更新(或者至少我不知道如何判断)。

您执行哪个 API 调用来查找给定时间段内退回和/或退款的订单/行项目?

或者,您执行哪个 API 调用来查明订单/行项目是否已退回和/或退款?

或者,您在订单记录中的哪个位置(通过哪组 API 调用检索)来确定订单/行项目是否已退回和/或退款?

amazon-web-services amazon-selling-partner-api

6
推荐指数
0
解决办法
3140
查看次数

AVR模拟比较器+内部上拉?

我希望有一个关于Atmel AVR微控制器的简单问题.所以我想使用ATTiny85的模拟比较器来确定信号是高于还是低于阈值.当"有效"时(即,它是一个有效的低开路集电极信号),该信号通常是"浮动"并被拉向地.如果我通过执行以下操作启用输入引脚上的上拉(也是比较器输入):

DDRB  = 0x00; // DDRB.1  = 0 = input 
PORTB = 0xFF; // PORTB.1 = 1 = internal pullup enabled
Run Code Online (Sandbox Code Playgroud)

如果我使用模拟比较器并选择PORTB.1作为AIN1,内部上拉应用于我的输入信号?我希望有人有个人经验来验证这种行为.希望这个问题对于堆栈溢出来说不是"硬件导向".谢谢!

编辑 响应下面的一些评论"为什么不以数字方式对待"的效果,这是因为我的"信号"是由传感器(即光学红外传感器)产生的.我无法保证它会"足够硬"地将其解释为零数字,因此我将使用内部2.56V参考作为切换阈值.我只是想拿起"IR事件",所以这对我来说似乎是最简单的方式.

此外,通过使用模拟比较器,我可以使用ISR"异步"检测事件.当然,有些引脚可以在数字边沿上调用中断,但是不希望依赖于响应低于V_IL.

hardware embedded microcontroller avr avr-gcc

5
推荐指数
1
解决办法
2801
查看次数

复制关系表数据

我希望我在这个问题上没有太长时间的啰嗦,我只是想确保我所要求的是完全清楚的(我认为这是相当令人困惑的:).

我有一个包含大量表的数据库,并设置了所有外键约束.关系有时会有几个表深,并且还存在子表与多个父表相关的情况.我想插入一个我的"顶级"表行的副本,以及与之相关的所有子表数据(保持关系完整性).也就是说我的新的顶级行都有自己的新的主键(通过AUTO_INCREMENT),和所有的新的子行获得自己的主键(再次通过AUTO_INCREMENT),并且所有表的外键信息类似涉及我复制的数据(现在只有新创建的主键).所以现在我将拥有一份与原始数据独立可变的关系数据.

为了使我的例子更具体,我辛辛苦苦地建立了一个类似但更简单的例子.让我们定义下表:

alt text http://www.freeimagehosting.net/uploads/ef22070a89.png

所有绿色id字段都是auto_update主键,而淡黄色字段是带有外键约束的索引列.让我们说数据库最初有以下数据:

job_types
+----+----------+
| id | jobcode  |
+----+----------+
|  1 | DEADBEEF |
|  3 | FEEDFACE |
+----+----------+

managers
+----+---------------+-------------+
| id | name          | job_type_id |
+----+---------------+-------------+
|  1 | John          |           1 |
|  3 | Michael Scott |           3 |
+----+---------------+-------------+

departments
+----+------+------------+
| id | name | manager_id |
+----+------+------------+
|  1 | H32  |          1 |
|  2 | X11  |          3 |
+----+------+------------+

employees
+----+-------------+---------------+------------+-------------+
| …
Run Code Online (Sandbox Code Playgroud)

mysql database performance grails relational-database

5
推荐指数
1
解决办法
1203
查看次数

角度材料表单验证

如果我的 FormGroup 的字段是模型绑定的,ala [(ngModel)],并且在页面加载时填充,例如由于服务,我的提交按钮,它被保护为[disabled]="biodataForm.status !== 'VALID'",不会被禁用。如果表格出现空白并且我正常填写,那么当表格正确填写时,警卫会通过。如果通过数据绑定填充了相同的确切值,则 biodataForm.status 值将保持无效,直到我更改每个字段的值。

我的感觉是,在填充数据绑定后,表单应该识别出它具有有效内容,因此它的状态应该从 INVALID 更改为 VALID ......这里出了什么问题?

我的表单标记如下所示:

  <form class="form" name="biodataForm" [formGroup]="biodataForm">
    <mat-form-field class="full-width">
      <input matInput placeholder="First Name" 
        required
        [(ngModel)]="_memberdata.firstname"
        [formControl]="firstnameFormControl">
      <mat-error *ngIf="firstnameFormControl.invalid">{{getRequiredErrorMessage('firstname')}}</mat-error>        
    </mat-form-field>
    <mat-form-field class="full-width">
      <input matInput placeholder="Last Name" 
        required
        [(ngModel)]="_memberdata.lastname"
        [formControl]="lastnameFormControl">
      <mat-error *ngIf="lastnameFormControl.invalid">{{getRequiredErrorMessage('lastname')}}</mat-error>                
    </mat-form-field>
    <mat-form-field class="full-width"
      hintLabel="Note: We'll send you an email with a link to click to prove it's you">
      <input matInput placeholder="Email" 
        required
        [(value)]="_memberdata.email"
        [formControl]="emailFormControl">
      <mat-error *ngIf="emailFormControl.invalid">{{getEmailErrorMessage()}}</mat-error>        
    </mat-form-field>    
    <mat-form-field class="full-width">
      <input matInput placeholder="Phone" type="tel" 
        [(value)]="_memberdata.phone"
        required …
Run Code Online (Sandbox Code Playgroud)

forms validation angular-material2 angular5

5
推荐指数
1
解决办法
3万
查看次数

控制Webpack 3捆绑/打包(在Ionic3中)

据我所知,node_modules中有一堆东西,这些东西最终都在vendor.js我构建Ionic3项目时出现。为了简单起见,可以说我在node_modules中具有以下文件夹:abc,xyz,uvw和qrs。让我们进一步说,abc和xyz是公共库,而uvw和qrs是私有库。因此,我不想以vendor.js包含所有四个库的单个库结束。相反,我想最后得到一个vendor.js包含abc和xyz以及一个private.js包含uvw和qrs的。

如何更改Ionic3项目中的配置文件以实现该结果?理想情况下,我只需要在配置中命名uvw和qrs,并为node_modules中的“其他所有东西”生成vendor.js的默认行为。

更新 作为参考,Ionic 3.9.2使用Webpack 3.10.0,默认的Ionic Webpack配置如下所示。我真的只关心生产构建是否具有上述行为。

/*
 * The webpack config exports an object that has a valid webpack configuration
 * For each environment name. By default, there are two Ionic environments:
 * "dev" and "prod". As such, the webpack.config.js exports a dictionary object
 * with "keys" for "dev" and "prod", where the value is a valid webpack configuration
 * For details on configuring webpack, see their documentation here
 * https://webpack.js.org/configuration/ …
Run Code Online (Sandbox Code Playgroud)

chunking bundling-and-minification webpack ionic3

5
推荐指数
1
解决办法
137
查看次数

Ionic4 打印媒体查询可滚动离子内容

非常简单的问题。在我的 Ionic4 应用程序中具有可滚动的离子内容。我希望能够通过应用@media only print样式来优雅地打印它。我快到了,但我有一个大问题。我无法让垂直滚动条消失以进行打印。此外,我只打印一页,仅包含打印该页面时看到的内容。我在网上搜索了解决方案,并在 Ionic3 及更早版本的上下文中遇到并尝试了各种建议,但我还没有找到 Ionic4 的灵丹妙药。有没有人遇到过并深入了解过这个问题?

*** 更新 ***

这似乎适用于https://github.com/ionic-team/ionic-framework/issues/19886#issuecomment-1531073496的 Ionic 7 。添加到全局 scss。

@media print {
  .ion-page {
    display: initial !important;
    position: initial !important;
  }
  body {
    position: initial !important;
    max-height: initial !important;
    overflow: auto !important;
  }
  ion-router-outlet {
    overflow: auto !important;
    contain: none !important;
    position: initial !important;
  }
  ion-content {
    --offset-bottom: unset !important;
    display: unset !important;;
    position: unset !important;;
  }
}
Run Code Online (Sandbox Code Playgroud)

media-queries ionic4

5
推荐指数
1
解决办法
1337
查看次数

我如何使用 Amazon Login 将用户帐户链接到我的技能?

通过遵循亚马逊的 Alexa 文档,我很难让它发挥作用。我在 Account Linking 上搁浅,因为我不知道如何让 Login with Amazon (LWA) 请求 alexa::skills:account_linking 范围。

我已经在我的应用程序中包含了 Amazon API 库并正确设置了所有内容,我正在使用(全球可用的)亚马逊对象调用该过程,如下所示(打字稿):

    const options: any = {};
    options.scope = ['profile', 'alexa::skills:account_linking'];
    options.scope_data = {
        profile : {essential: false}
    };    
    options.response_type = 'code';

    const self = this;
    amazon.Login.authorize(options, (response) => {
      if (!response || !response.code) {
        throw { error: response };
      }

      // ... send the response code to my server 
      // ... to be exchanged for bearer and refresh tokens
    });
Run Code Online (Sandbox Code Playgroud)

我希望从中发生的是一个弹出的亚马逊登录过程,它会产生(1)让用户登录到亚马逊,并且(2)征得用户的同意,将他们的亚马逊帐户链接到我的 Alexa 技能(即链接到我的凭证托管服务),以便我们(在浏览器中)取回授权码,我们可以(在我们的服务器上)交换该授权码以获取承载和刷新令牌以代表用户执行操作。

问题是,上面的代码立即失败并且永远不会弹出进程。抛出的消息说:“请求了未知范围”。如果我从 …

amazon-web-services alexa account-linking alexa-account-linking

5
推荐指数
1
解决办法
673
查看次数

MongoDB 中的 ISO8601 日期字符串(索引和查询)

我在 MongoDB 中有一个文档集合,它们都有一个“日期”字段,它是一个 ISO8601 格式的日期字符串(即由 moment.js format() 方法创建)。

我希望能够有效地对该集合运行查询,表达“日期在 A 之后且 B 之前的文档”(即某个日期范围内的文档)的情绪。

我应该将日期存储为 ISO-8601 字符串以外的其他内容吗?根据这个答案,针对我上述要求的 MongoDB 查询操作会是什么样子?我正在设想类似的事情:

{$and: [
  {date: {$gt: "2017-05-02T03:15:22-04:00"}},
  {date: {$lt: "2017-06-02T03:15:22-04:00"}},
]}
Run Code Online (Sandbox Code Playgroud)

这“有效”吗?我需要一些有说服力的东西。

date mongodb

4
推荐指数
1
解决办法
2578
查看次数

使 ng-select 宽度调整到所选项目/可用选项?

我在 Ionic3/Angular5 项目中使用 ng-select 并且我正在使用它的多选配置。选择输入的显示总是比包含所选项目或任何可用选项所需的要宽得多。

如果选择了任何一个可用选项,我希望它的宽度至少是组件将具有的最大宽度,否则宽度是包含主动选择的选项所需的任何宽度。

是否有可能让 ng-select 以这种方式表现?

css width ionic-framework angular-ngselect angular

2
推荐指数
1
解决办法
7009
查看次数

数据库 (mysql) 数据类型选择:文本 vs 二进制

与 BLOB 或 BINARY 数据类型相比,选择 TEXT 数据类型有哪些权衡?我不打算在列上建立索引或在 WHERE 子句中使用它,它只是数据库中的数据,恰好是文本。不过,如果我选择的数据类型有性能或存储优势,那会很高兴知道......谢谢!

mysql database-design

1
推荐指数
1
解决办法
1708
查看次数