6

私はプロジェクトでMozillaPersonaを使用しています。loggedInUser後に更新したいのですがonlogin。ただし、loggedInUserはに渡されるオブジェクトの属性ですnavigator.id.watch()navigator.id.watch()(AngularJSサービスで)一度呼び出されました。オブジェクト全体を渡して、もう一度呼び出す必要がありますか?正しくないようです。私が間違っている?= P

これが私のサービスです:

app.factory('persona', function ($rootScope, $http) {
navigator.id.watch({
    loggedInUser: null,
    onlogin: function onlogin(assertion) {
        console.log(this);
        $http.post('/signIn', { assertion: assertion })
            .then(function (data, status, headers, config) {
                $rootScope.$broadcast('signIn', data.data);
            }, function (data, status, headers, config) {
                $rootScope.$broadcast('signInError', data.data);
            });
    },
    onlogout: function onlogout(param) {
        $http.get('/signOut')
            .then(function (data, status, headers, config) {
                $rootScope.$broadcast('signOut', data.data);
            }, function (data, status, headers, config) {
                $rootScope.$broadcast('signOutError', data.data);
            });
    }
});

return {
    signIn: function signIn() {
        navigator.id.request();
    },
    signOut: function signOut() {
        navigator.id.logout();
    }
};
});
4

2 に答える 2

3

MDN の例のように、loggedInUser をグローバルにするか、少なくとも navigator.id.watch メソッドと同じスコープの下で「ローカルにグローバル」にすることはできませんか?

その後、電子メールを含む一部のデータを含む JSON 応答を Persona サービスから取得できます。したがって、AJAX 応答でそのデータを渡し、loggedInUser 変数を埋めることができます。

https://developer.mozilla.org/en-US/docs/Persona/Quick_Setup#Step_3.3A_Watch_for_login_and_logout_actions

var currentUser = 'bob@example.com';

navigator.id.watch({
  loggedInUser: currentUser,
  onlogin: function(assertion) {
    $.ajax({ 
      type: 'POST',
      url: '/auth/login', // This is a URL on your website.
      data: {assertion: assertion},
      success: function(res, status, xhr) { window.location.reload(); },
      error: function(xhr, status, err) {
        navigator.id.logout();
        alert("Login failure: " + err);
      }
    });
  },
  onlogout: function() {
    $.ajax({
      type: 'POST',
      url: '/auth/logout', // This is a URL on your website.
      success: function(res, status, xhr) { window.location.reload(); },
      error: function(xhr, status, err) { alert("Logout failure: " + err); }
    });
  }
});

MDN からの JSON 応答サンプル:

{
  "status": "okay",
  "email": "bob@eyedee.me",
  "audience": "https://example.com:443",
  "expires": 1308859352261,
  "issuer": "eyedee.me"
}
于 2013-04-02T00:34:12.883 に答える