我正在开发一个包含在Cordova中并使用Phonegap Build构建的JavaScript应用程序.我们cordova-plugin-whitelist在构建中包含npm,并在index.html中添加<access origin="*" />了config.xml和一个开放的CSP(<meta http-equiv="Content-Security-Policy" content="default-src *; style-src 'self' 'unsafe-inline'; script-src 'self' 'unsafe-inline' 'unsafe-eval'">).该应用程序在Android上运行良好,可以毫无问题地与我们的服务器通信,但在iOS上,所有请求都会立即失败,就像白名单插件不允许通过流量一样.
我已经尝试了许多不同的构建配置,以防特定版本的Cordova中出现问题,但根本无法使其工作.我过去曾遇到过与其他Phonegap/Cordova应用程序类似的问题,但是能够使用白名单插件/ CSP /访问规则来解决它.
此问题也很难调试,因为Safari开发人员工具无法连接到iOS设备,我不得不提醒我看到的响应.看起来回来的响应有一个状态代码0和一个空体,我假设它只是意味着无法访问.
我们有一个Web应用程序,它使用Strongloop的LoopBack作为API和后端,以及前端的Angular,Cordova用于打包移动.来自Cordova的Web应用程序和iOS目标运行良好,但是当我们尝试为Android设备构建时,应用程序服务器无法从设备访问.更具体地说,在加载客户端应用程序并尝试登录后,设备向我的API发出POST但从未收到响应(据我所知,请求从未真正命中过服务器).
这是我到目前为止所尝试的:
access设置为origin="*"Content-Security-Policy在我的(单页)应用程序的index.html中设置了元标记,允许远程网络INTERNET在Android Manifest中正确设置了权限lb-services.jsAngular服务具有正确的API地址由于我能够在没有任何问题的情况下使用Cordova在iOS上运行我的应用程序,我认为我的Android配置必须有特定的东西.我确实遇到了一个单独的问题,即安装的插件与最新的Cordova不兼容,但删除该插件似乎已经解决了这个问题.为Android构建有什么不同可以防止这种情况发生?
编辑:
我已经转而使用Phonegap Build,希望这将是一个更简单的工作流程,但我仍然看到相同的问题..这是我正在做的白名单/ CORS配置:
index.html中的元标记:
<meta http-equiv="Content-Security-Policy" content="default-src *; style-src * 'self' 'unsafe-inline'; script-src * 'self' 'unsafe-inline' 'unsafe-eval'">
config.xml(Phonegap Build,可识别信息已删除):
<?xml version="1.0" encoding="UTF-8" ?>
<widget xmlns="http://www.w3.org/ns/widgets" xmlns:gap="http://phonegap.com/ns/1.0" id="..." version="1.0.0">
<name ... />
<description ... />
<author ... />
<icon src="icon.png" />
<gap:splash src="splash.png" />
<preference name='phonegap-version' value='cli-5.1.1' />
<gap:plugin name="com.indigoway.cordova.whitelist.whitelistplugin" version="1.1.1" />
</widget>
我正在一个使用Loopback作为框架的项目,其中包括用户和身份验证。我添加了生成并通过电子邮件发送的密码重置路由,并且一切似乎都正常运行。最近,我发现密码重置似乎不起作用。此处重置密码的过程是:
预期的行为是密码将在密码重置表单上更新。相反,我收到了401或500的授权错误(似乎来回了)。我注意到在发送给API的实际标头中,授权令牌与我从路由传递的内容不匹配。尝试使用LoopBackAUth.setUser进行设置无效,并且在实际发送请求之前也不会更新授权属性。
第一次添加时,我肯定会花时间测试它,但我不知道要改变什么才能打破它。我一直在遵循loopback-faq-user-management中的示例,但是在该示例中,我们有一个Angular前端而不是服务器侧视图。
编辑:
我尝试完全打开ACL,以查看是否可以更新用户对象(继承自User,但它是自己的类型)的密码(或任何属性)。尝试执行此操作时,我仍然收到401。
编辑#2:
这是我的ACL和有关如何调用此代码的示例代码。
来自模型定义的ACL
...
{
"accessType": "*",
"principalType": "ROLE",
"principalId": "$owner",
"permission": "ALLOW"
},
{
"accessType": "EXECUTE",
"principalType": "ROLE",
"principalId": "$owner",
"permission": "ALLOW",
"property": "updateAttributes"
}
...
Run Code Online (Sandbox Code Playgroud)
auth.js
...
resetPassword: function(user) {
return MyUser.prototype$updateAttributes(user, user).$promise;
}
...
Run Code Online (Sandbox Code Playgroud) angularjs ×2
cordova ×2
javascript ×2
strongloop ×2
android ×1
ios ×1
loopbackjs ×1
node.js ×1