1

backbone.js と require.js に基づいて、firebase ログイン メカニズムを phonegap アプリケーションに統合しようとしています。facebook でのログインと twitter でのログインを正常に設定し、正常に動作しているようです。

今、私は最後のものに問題があります:電子メールとパスワードでログイン...何が起こっているのかわかりませんが、パスワードでログインすると、認証クライアント定義内のコールバックメソッドが呼び出されないようです。これは、実行の開始時に require で呼び出すメイン ファイルです。

  require.config({
    paths: {
    domReady: '../lib/require/domReady',
    text: '../lib/require/text-1.0.6',
    async: '../lib/require/async',
    zepto: '../lib/zepto/zepto',
    underscore: '../lib/underscore/underscore-min',
    backbone: '../lib/backbone/backbone',
    handlebars: '../lib/handlebars/handlebars',
    firebase: '../lib/firebase/firebase',
    backfire: '../lib/firebase/backfire',
    fireauth: '../lib/firebase/firebase-auth-client',
    leaflet: '../lib/leaflet/leaflet',
    barcodescanner: '../lib/barcodescanner/barcodescanner',
    templates: '../templates',
  },
  shim: {
    'zepto': {
      exports: '$'
    },
    'underscore': {
    exports: '_'
    },
    'backbone': {
        deps: ['zepto', 'underscore'],
        exports: 'Backbone'
    },
    'handlebars': {
        exports: 'Handlebars'
    },
    'firebase': {
        exports: 'Firebase'
    },
    'backfire': {
        deps: ['backbone','firebase'],
        exports: 'Backfire'
    },
    'fireauth': {
      deps: ['firebase'],
      exports: 'Fireauth'
    },
    'leaflet': {
        exports: 'L'
    },
    'barcodescanner': {
        exports: 'Barcodescanner'
    }
  }
});


require(['zepto','domReady','underscore','backbone','firebase','fireauth','router'],
    function ($,domReady, _,Backbone,Firebase,Fireauth,AppRouter) {

    domReady(function () {
      document.addEventListener("deviceready", run, false);
    });

    function run() {

        firebaseRef = new Firebase('https://cicero.firebaseio.com');
        authClient = new FirebaseAuthClient(firebaseRef, function(error, user) {
            if (error) {
                alert("error during user login");
            } else if (user) {
                    auth = user;
                    Backbone.history.navigate("map", {trigger: true});

                    } else {
                            auth = undefined;
                    }
          });

        new AppRouter();
        Backbone.history.start();
    }
  });

これは、ログインメソッドを呼び出すビューです:

define(["zepto", "underscore", "backbone", "handlebars","firebase","fireauth","text!templates/loginView.html"],
    function ($, _, Backbone, Handlebars,Firebase,Fireauth,template) {

    var loginView = Backbone.View.extend({

        events: {
            "touchstart #login" : "login",
            "touchstart #register" : "showRegistration",
            "touchstart #guest" : "showMap",
            "touchstart #facebook" : "loginFacebook",
            "touchstart #twitter" : "loginTwitter"
          },

        template: Handlebars.compile(template),

        initialize: function () {
            this.render();
        },

        render: function (eventName) {
            $(this.el).empty();
            $(this.el).html(this.template());
            return this;
        },

        showRegistration: function () {
            Backbone.history.navigate("register", {trigger: true});
        },

        showMap: function () {
            Backbone.history.navigate("map", {trigger: true});
        },

        login: function(){
            var user_email = $('#email').attr('value');
            var user_password = $('#password').attr('value');
            authClient.login("password", {
                email: user_email,
                password: user_password
              });
        },

        loginFacebook: function(){
            authClient.login("facebook");
        },

        loginTwitter: function(){
            authClient.login("twitter");
        }

      });

    return loginView;

  });

ご覧のとおり、3 つのグローバル変数 (firebaseRef、authCLient、および auth) を使用して、アプリケーションのすべての部分でそれらの参照を取得します。それが適切な方法であるかどうかはわかりません。FacebookとTwitterでログインしようとすると、機能し、コールバック関数が新しいページ内にリダイレクトします.代わりにパスワードと電子メールでログインすると、ページが更新されますが、変更されません.

4

0 に答える 0