私は非常に新しく、Facebook経由で認証を実装しようとしています
Facebookに接続するためにember-facebook.jsライブラリを使用しています。認証が成功したら、「/index」などの別のルートに遷移したいと考えています。このライブラリは、Facebook の応答から入力される mixin に App.FBUser オブジェクトを作成します。ブログには次のように書かれています。
ユーザーが変更されるたびに (ログイン、ログアウト、アプリの承認など)、メソッド updateFBUser が呼び出され、アプリケーションの App.FBUser オブジェクトが更新されます。このバインディングでやりたいことは何でもできます。それを観察し、DOM に入れます。
Ember.Facebook = Ember.Mixin.create({
FBUser: void 0,
appId: void 0,
fetchPicture: true,
init: function() {
this._super();
return window.FBApp = this;
},
appIdChanged: (function() {
var _this = this;
this.removeObserver('appId');
window.fbAsyncInit = function() {
return _this.fbAsyncInit();
};
return $(function() {
var js;
js = document.createElement('script');
$(js).attr({
id: 'facebook-jssdk',
async: true,
src: "//connect.facebook.net/en_US/all.js"
});
return $('head').append(js);
});
}).observes('appId'),
fbAsyncInit: function() {
var _this = this;
FB.init({
appId: this.get('appId'),
status: true,
cookie: true,
xfbml: true
});
this.set('FBloading', true);
FB.Event.subscribe('auth.authResponseChange', function(response) {
return _this.updateFBUser(response);
});
return FB.getLoginStatus(function(response) {
return _this.updateFBUser(response);
});
},
updateFBUser: function(response) {
console.log("Facebook.updateFBUser: Start");
var _this = this;
if (response.status === 'connected') {
//console.log(_this);
return FB.api('/me', function(user) {
var FBUser;
FBUser = user;
FBUser.accessToken = response.authResponse.accessToken;
if (_this.get('fetchPicture')) {
return FB.api('/me/picture', function(path) {
FBUser.picture = path;
_this.set('FBUser', FBUser);
return _this.set('FBloading', false);
});
} else {
_this.set('FBUser', FBUser);
return _this.set('FBloading', false);
}
});
} else {
this.set('FBUser', false);
return this.set('FBloading', false);
}
}//updateFBUser
});
アップデート :
LoginController に次のオブザーバーを追加すると、App.FBUser 更新イベントをキャプチャできます (ブログで示されているように、FB からの応答を取得した後に更新されます)。このオブザーバー メソッドから、インデックス ルートを 'transitionTo' にしようとすると、 Uncaught TypeError: Object data-size has no method 'transitionTo' というエラーが発生します。以下はコードです
App.LoginController = Ember.Controller.extend({
onSuccess: (function(){
var self = this;
/*
//tried all these method to redirect but error is the same
var attemptedTransition = this.get('attemptedTransition');
attemptedTransition.retry();
*/
/*
//tried all these method to redirect but error is the same
var router = this.get('target.router');
router.transitionTo('index');
*/
//tried all these method to redirect but error is the same
this.transitionToRoute('index');
}).observes('App.FBUser')
});
インデックス ルート
App.AuthenticatedRoute = Ember.Route.extend({
beforeModel: function(transition){
var self = this;
if(!App.FBUser){
self.redirectToLogin(transition);
}
},
redirectToLogin: function(transition){
var loginController = this.controllerFor('login');
loginController.set('attemptedTransition', transition);
this.transitionTo('login');
}
});
私はそれを理解することができません。
どんな助けでも大歓迎です。ありがとう