我在使用torii适配器进行Facebook身份验证时遇到问题,错误是:“Torii适配器必须实现open
才能打开 session ”。
我访问了许多教程,并尝试了所有介绍的方法,但是大多数方法通常都是旧的 Ember 代码,而且似乎都没有实际的作用。
当前状态:我可以登录,可以看到Facebook弹出窗口并且可以授权。
使用提琴手,我还可以看到来自API的响应,该响应包含一个JSON响应,以及来自经过身份验证的用户的所有凭据。
在Firebase控制台中,我可以看到授权用户,重置其密码,拒绝访问,...
所有这些使我相信,这“仅仅是”一个前端问题,我似乎无法建立一个合适的“ session ”来进行工作。
我的最终目标是获取相关的用户数据并将其作为“用户”条目传输到我的Firebase后端,以便快速注册网站访问者,但我很高兴能进行一次活跃的 session ,因此我可以剩下的事我自己解决。
作为前端菜鸟(我通常使用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(),
});
路由/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
更改了代码以反映实际问题。之前的代码无法解决,但是我没有意识到,因为直到服务器重启后它才开始工作。
编辑3
找到并尝试了此操作,但无济于事:https://stackoverflow.com/a/32079863/4309050
最佳答案
我遇到了同样的问题,并且注意到我的torii-adapters/application.js
位于pods
结构下(因为我使用了它)。因此,我将torii-adapters
文件夹移到app
文件夹,一切开始工作。