Meteor 1.3+ 帐户 Facebook 登录 iOS 不工作
Posted
技术标签:
【中文标题】Meteor 1.3+ 帐户 Facebook 登录 iOS 不工作【英文标题】:Meteor 1.3+ Accounts Facebook Login for iOS not working 【发布时间】:2017-02-17 14:32:51 【问题描述】:我一直在尝试找到一个解决方案(可悲的是,现在已经 3 个月了)在 ios 上使用 Meteors Accounts Facebook 登录 Facebook。我已经尝试了几乎所有谷歌搜索会出现的东西,在 Meteor 论坛上联系过,甚至打开了一个 Github 问题。
但是这个问题仍然让我无法理解。在台式机上一切正常,但我在移动设备上测试后立即收到 Facebook 错误 “未登录。您尚未登录。请登录并重试”。
我发现了其他几个与此问题有关的问题,并且对完整证明答案的投入很少。在这一点上,我开始变得绝望。
在 Meteor 升级到 1.3 之前,这不是问题。
【问题讨论】:
听起来这是一个真正的问题,因为您发现其他人也有这个问题。如果您有足够的信心,您可以查看 Accounts 包源代码并尝试解决问题,或者您可以使用您的证据(和示例 repo)提出 Meteor 问题。听起来这是一个需要解决的问题 绝对是,或者根本没有我们能理解的解决方案。它总共困扰了我大约 6 个月。 嗯,如果能提示别人看,我觉得值得 大约三个月前我在 mdg GitHub 上留下了一个问题,然后一个月前碰到了它。也被别人撞了。 github.com/meteor/accounts/issues/9 【参考方案1】:以下设置对我有用
-
最新版本的 Meteor 和 Xcode
帐户相关的 Meteor 包
accounts-base
accounts-password
accounts-facebook
accounts-google
useraccounts:materialize
service-configuration
accounts-ui
splendido:accounts-meld
渲染模板
> atForm
我还添加了 2 个 cordova 插件(为此在 .meteor
文件夹中创建一个文件,名称为 cordova-plugins
和以下内容
cordova-plugin-meteor-webapp@https://github.com/meteor/cordova-plugin-meteor-webapp.git#8bf95eed3f313299fc2de33658866278eea2cdc5
cordova-plugin-inappbrowser@https://github.com/apache/cordova-plugin-inappbrowser.git#2df0e72c36f1fda35c04b3b06bd7beaafaae6ee9
还要确保在 html 的 head 标签中有以下行
<meta http-equiv="Content-Security-Policy" content="default-src * 'unsafe-inline' 'unsafe-eval' data: " />
最后在您的mobile-config.js
文件中添加以下行
App.accessRule('http://*', type: 'navigation');
App.accessRule('https://*', type: 'navigation');
还要在构建之前运行meteor reset
命令
【讨论】:
今晚我会试试你的过程。我很好奇为什么在这种情况下需要“流星重置”?我需要在每次构建之前都这样做吗? 也只是好奇在 Facebook 开发者部分,您是否进行了标准网站平台构建? 我还有一个问题。对于 cordova-plugins 文件,我应该使用什么文件扩展名? 有时更改的代码不会反映在cordova构建(ios和android)中,在这种情况下meteor reset
可以解决问题。
对于创建 facebook 应用程序,我按照帐户 ui(facebook 配置按钮)显示的说明进行操作【参考方案2】:
这可能是GitHub issues中的问题
根据author- 看来,iOS 10 中的 WKWebView 不再将 Meteor Cordova CSP (default-src *) 应用于 websockets,并阻止连接,并显示以下消息。当用户更新到 iOS 10 时,这会破坏建立 websocket 连接的生产应用程序 (可能只有与 Meteor 服务器的默认连接以外的连接?不确定) (已发布)。
问题在于代码行
<meta http-equiv="Content-Security-Policy" content="default-src * data: blob: 'unsafe-inline' 'unsafe-eval';">
你可以尝试替换成
<meta http-equiv="Content-Security-Policy" content="default-src * 'self' data: blob: 'unsafe-inline' 'unsafe-eval' wss://*.ourdomain.tld ">
在文件https://github.com/meteor/meteor/blob/master/packages/boilerplate-generator/boilerplate_web.cordova.html
然后运行 meteor update boilerplate-generator
更新 Meteor 1.4
您也可以尝试更新meteor update --release 1.4.2-beta.4
,如链接中所述
此包在构建过程中运行,在项目级别更新此包不会更改用于构建应用程序的文件。
如果它仍然不起作用,那么按照author的建议
你可以添加一个简单的插件meteor add cordova:meteor-ios10-csp-fix@0.1.0
repo 是here,npm 页面是here
希望这会有所帮助。
全部归属于 github 链接和上述作者
【讨论】:
您好,感谢您的回复。也许我没听懂,对吧。但这似乎没有做到。 您是否也尝试过测试版和meteor-ios10-csp-fix@0.1.0 插件?【参考方案3】:为了使这项工作适合我,我升级到了最新版本的流星、帐户-facebook 等。
接下来,我部署了一个 Web 版本的应用程序,并使用有效的 facebook 登录。然后我测试了网络应用 facebook 登录。将有效的 oauth 重定向 URI 添加到您的 facebook 应用程序设置中后,一切都会好起来。这些应该类似于https://example.com
然后我跑到终端meteor run ios-device --settings settings.json --mobile-server https://example.com
我的 mobile-config.js 文件也包含在 @Afzal Hossain 的推荐中
App.accessRule('http://*', type: 'navigation');
App.accessRule('https://*', type: 'navigation');
我设备上的应用可以登录。
不再需要 cordova 插件或 CSP 策略,因为流星更新使这些变得不必要了。
【讨论】:
所以请确保我的流程正确无误。您必须先部署到实时服务器吗?对于 --mobile-server,您是声明了连接还是在 settings.json 中建立了连接? 正确,为了测试,我在 linode 上部署了该站点的暂存版本。我不需要在 settings.json 中做任何我不会在常规部署中做的特殊操作。【参考方案4】:我已通过在 Facebook 应用的“有效 OAuth 重定向 URI”中指定正确的 Url 解决了同样的问题。
之前,我已经指定
http://<domainname>/_oauth/facebook?close
这不起作用。经过一番调试,我发现网址应该是
http://<domainname>:<port>/_oauth/facebook?close
(带端口号)
所以如果一个服务器在http://localhost:3000
上运行,它将是http://<device ip/external ip>:3000/_oauth/facebook?close
而且,如果您使用 --server=http://www.domainname.com 运行应用程序,那么它将是 http://www.domainname:80/_oauth/facebook?close
(HTTP 的端口 80)
现在,我看到 Facebook 应用登录页面并且可以登录了。
但现在我在身份验证后关闭 InAppBrowser。在这方面的任何帮助都会很棒!
【讨论】:
以上是关于Meteor 1.3+ 帐户 Facebook 登录 iOS 不工作的主要内容,如果未能解决你的问题,请参考以下文章
使用社交媒体帐户(即 Facebook)注册/登录到 magnolia cms
如何在 react native 和 facebook sdk 中管理用户帐户状态?
Meteor Accounts-UI-Bootstrap - 弹出窗口不关闭