Session 使用firebase和ember猜测登录
我尝试使用Ember和Firebase实现匿名登录。我已经成功地将我的项目配置为与Firebase和Emberfire一起使用,并且我可以登录到我的Firebase。但是,当我试图在会话初始值设定项中保存用户信息时,我无法检索它以使我的控制器了解用户状态。 这是我的代码: 我在application.hbs中有一个侧栏,如果用户已连接,我希望显示该侧栏Session 使用firebase和ember猜测登录,session,ember.js,Session,Ember.js,我尝试使用Ember和Firebase实现匿名登录。我已经成功地将我的项目配置为与Firebase和Emberfire一起使用,并且我可以登录到我的Firebase。但是,当我试图在会话初始值设定项中保存用户信息时,我无法检索它以使我的控制器了解用户状态。 这是我的代码: 我在application.hbs中有一个侧栏,如果用户已连接,我希望显示该侧栏 <div class="container-fluid" id="main"> <div class="row">
<div class="container-fluid" id="main">
<div class="row">
{{#if loggedIn}}
<aside class="col-xs-3">
{{outlet sidebar}}
</aside>
<div class="col-xs-9">
{{outlet}}
</div>
{{else}}
<div class="col-xs-12">
{{outlet}}
</div>
{{/if}}
</div>
</div>
this.session引用了在控制器和路由内部注入的初始值设定项:
import Ember from 'ember';
export function initialize(container, application) {
var session = Ember.Object.extend({
authData : [],
user : null,
login : function(authData, user) {
console.log(authData);
console.log(user);
this.set('authData', authData);
this.set('user',user);
},
getUser: function() {
return this.get('user');
},
getAuthData: function() {
return this.get('authData');
},
isConnected : function() {
return (this.get('user') == null) ? false : true;
}.property('user')
});
application.register('session:main', session, { singleton: true });
// Add `session` object to route to check user
application.inject('route', 'session', 'session:main');
// Add `session` object to controller to visualize in templates
application.inject('controller', 'session', 'session:main');
}
export default {
name: 'session',
initialize: initialize
};
这是我的登录控制器:
import Ember from "ember";
var LoginController = Ember.ObjectController.extend({
model : {},
ages : function() {
var ages = Ember.A();
for(var i = 18; i <= 99; i++) {
ages.push(i);
}
return ages;
}.property(),
sexs : ['Male', 'Female'],
actions : {
logIn : function() {
var data = this.getProperties("name", "age", "sex");
var that = this;
this.database.authAnonymously(function(error, authData) {
if (error) {
console.log(error);
} else {
var newUser = that.store.createRecord('user', {
name: data['name'],
age: data['age'],
sex:(data['age'] === "Male" ? 0 : 1)
});
newUser.save();
that.session.login(authData, newUser);
console.log("Toto", that.session.get('isConnected'));
that.transitionToRoute('chat');
}
});
}
}
});
export default LoginController;
从“余烬”导入余烬;
var LoginController=Ember.ObjectController.extend({
型号:{},
年龄:函数(){
var ages=Ember.A();
对于(var i=18;i简单答案
var ApplicationController = Ember.ObjectController.extend({
loggedIn :Em.computed.alias('session.isConnected'),
// or
loggedIn : function(){
return this.get('session.isConnected');
}.property('session.isConnected')
});
你的问题是你的依赖关系。要么你没有看到它(property()
),要么你崩溃了,因为这个.session
在窗口范围内不存在。我怀疑Ember是否真的在对你大喊大叫,而不仅仅是在分析你的javascript时对javascript引擎大喊大叫
loggedIn :function() {
console.log("Tota", this.session.get('isConnected'));
return this.session.get('isConnected');
}.property(),
// this is resolved while defining the controller, think of its scope
它是这样解决的:
var tmp = this.session.get('isConnected');
var tmp2 = function() {
console.log("Tota", this.session.get('isConnected'));
return this.session.get('isConnected');
}.property(tmp);
var tmp3 = {
loggedIn: tmp2
};
var ApplicationController = Ember.ObjectController.extend(tmp3);
谢谢,它工作^^。所以,如果我理解,computed属性必须是字符串引用?是的,它应该是要监视的属性路径的字符串
var tmp = this.session.get('isConnected');
var tmp2 = function() {
console.log("Tota", this.session.get('isConnected'));
return this.session.get('isConnected');
}.property(tmp);
var tmp3 = {
loggedIn: tmp2
};
var ApplicationController = Ember.ObjectController.extend(tmp3);