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でログインしようとすると、機能し、コールバック関数が新しいページ内にリダイレクトします.代わりにパスワードと電子メールでログインすると、ページが更新されますが、変更されません.