我在使用torii适配器进行Facebook身份验证时遇到问题,错误如下:'Torii适配器必须实现open
才能打开会话'。
我看过很多教程,也尝试过所有的方法,但是大多数都是旧的ember代码,没有一个看起来能真正工作。
当前状态:我能够登录,我得到Facebook弹出窗口,我可以授权。
使用fiddler,我还可以看到来自API的响应,其中包含一个JSON响应,其中包含我验证的用户的所有凭据。在firebase控制台中,我可以看到授权用户,重置其密码,拒绝访问...
所有这些都让我相信,这“仅仅”是一个前端问题,我似乎无法建立一个适当的“会话”来处理。
我的最终目标是收集相关的用户数据,并将其作为“用户”条目传输到我的firebase后端,允许网站访问者快速注册,但我会非常高兴有一个活跃的会话,这样我就可以自己解决剩下的问题。
作为一个前端新手(我通常编写C#),Ember可能不是最好的选择,但我现在已经走了这么远,我不打算让它全部滑下来,拿起一个不同的框架。
我的代码:
config/environment.js
firebase: {
apiKey: 'xxxxxxx',
authDomain: 'myappname.firebaseapp.com',
databaseURL: 'https://myappname.firebaseio.com',
storageBucket: 'myappname.appspot.com',
messagingSenderId: '1234567890'
},
torii: {
sessionServiceName: 'session'
}
torii-adapters/application.js(我对它做了太多修改,甚至不记得原始代码是什么了,因为我在这里所做的任何修改/添加/删除似乎都没有任何作用。)
import Ember from 'ember';
import ToriiFirebaseAdapter from 'emberfire/torii-adapters/firebase';
export default ToriiFirebaseAdapter.extend({
firebase: Ember.inject.service(),
});
routes/application.js
import Ember from 'ember';
export default Ember.Route.extend({
beforeModel: function() {
return this.get('session').fetch().catch(function() {
});
},
actions:{
login: function(provider) {
this.get('session').open('firebase', {
provider: provider,
}).then(function(data) {
console.log(data.currentUser);
});
},
logout: function() {
this.get('session').close().then(function() {
this.transitionTo('application');
}.bind(this));
}
}
});
application.hbs
<div class="container">
{{partial 'navbar'}}
<a {{action "signIn" "facebook"}} class="btn">{{fa-icon "facebook"}}</a>
<a {{action "signIn" "twitter"}} class="btn">{{fa-icon "twitter"}}</a>
<a {{action "signIn" "github"}} class="btn">{{fa-icon "github"}}</a>
<a {{action "signIn" "google"}} class="btn">{{fa-icon "google"}}</a>
{{outlet}}
</div>
编辑1
上面的代码在重新启动ember服务器后给了我更多的错误。这是我的麻烦的原因吗?所有看起来没有改变的改变,直到服务器重新启动后才注册?如果是这样的话,我可能已经通过了大约一百次正确的解决方案了...
编辑2
修改代码以反映实际问题。之前的代码被拧得无法测量,但我从来没有意识到这一点,因为它没有回升,直到服务器重新启动后。
EDIT 3找到并尝试了此方法,但没有效果:https://stackoverflow.com/a/32079863/4309050
3条答案
按热度按时间yvgpqqbh1#
这是Lorem Ipsum Dolor's answer,但针对Ember 3.16+进行了更新
请注意,在Ember 3.16+中,不建议将操作添加到您的Route。相反,您可以将它们添加到Controller或Component上下文中:
请注意添加了router service。路由器服务是我们在应用程序中与路由进行交互的方式。
h9vpoimq2#
我遇到了同样的问题,我注意到我的
torii-adapters/application.js
位于pods
结构下(因为我使用它)。所以我把torii-adapters
文件夹移到app
文件夹,一切都开始工作了。jrcvhitl3#
注:对于Ember 3.16+应用程序,以下是相同的代码,但更新了语法/模式:https://stackoverflow.com/a/62500685/356849
下面是Ember〈3.16的代码,尽管代码可以像3.16+一样完全向后兼容,但写旧代码并不总是很有趣。
尝试在应用程序路由中注入服务,并将
beforeModel
移到actions
哈希之外,昨天我已经完成了同样的事情(Firebase Torii Auth),试着仔细按照指南操作。指南中唯一缺少的是手动注入
session
服务。还记得您在
environment.js
文件中声明的session
吗?您必须注入它才能使其可用https://github.com/firebase/emberfire/blob/master/docs/guide/authentication.md
在我的ToriiFirebaesAdapter中,