首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Mozilla Persona中登录后更新loggedInUser

如何在Mozilla Persona中登录后更新loggedInUser
EN

Stack Overflow用户
提问于 2013-03-05 23:19:46
回答 2查看 651关注 0票数 6

我在一个项目中使用Mozilla Persona。我想在onlogin之后更新loggedInUser。但loggedInUser是传递给navigator.id.watch()的对象的属性。(在AngularJS服务中)只调用了一次navigator.id.watch()。我应该再次调用它,传递完整的对象吗?看起来不太对劲。我说错了吗?

这是我的服务:

代码语言:javascript
复制
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();
    }
};
});
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-04-02 08:34:13

您不能像MDN示例一样,在与navigator.id.watch方法相同的作用域下使loggedInUser成为全局的,或者至少是“局部全局的”吗?

之后,您可以从Persona服务获得JSON响应,其中包含一些数据,包括电子邮件。这样您就可以在AJAX响应上传递数据并填充loggedInUser变量

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

代码语言:javascript
复制
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响应示例:

代码语言:javascript
复制
{
  "status": "okay",
  "email": "bob@eyedee.me",
  "audience": "https://example.com:443",
  "expires": 1308859352261,
  "issuer": "eyedee.me"
}
票数 3
EN

Stack Overflow用户

发布于 2014-02-06 00:25:00

navigator.id.watch调用中,设置loggedInUser: localStorage.getItem('persona') || null ( null很重要),然后,当Persona登录成功时,执行localStorage.setItem('persona', theUserEmail),当失败时,执行localStorage.removeItem('persona')

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15227451

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档