Session 使用firebase和ember猜测登录

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">

我尝试使用Ember和Firebase实现匿名登录。我已经成功地将我的项目配置为与Firebase和Emberfire一起使用,并且我可以登录到我的Firebase。但是,当我试图在会话初始值设定项中保存用户信息时,我无法检索它以使我的控制器了解用户状态。 这是我的代码: 我在application.hbs中有一个侧栏,如果用户已连接,我希望显示该侧栏

<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);