如何在使用Meteor登录过程中挂钩进行身份验证回调?

时间:2012-11-12 23:04:52

标签: meteor

使用meteor,我希望能够在他们使用外部服务登录(已验证)后获得user记录,以获取他们的授权声明。

更新 我正在使用{{loginButtons}}把手帮助器小部件。

目前,我看到在创建新用户期间可以挂钩的Accounts.validateNewUserAccounts.onCreateUser。这些在最初会有所帮助,但我的需要是经常性的。

我知道有allow函数挂起Meteor.Collection作为授权用户访问集合的方法 - 这正是我使用claims的地方我打算用增加用户来确定授权。

在登录过程中是否有人知道可以执行此操作的钩子?

6 个答案:

答案 0 :(得分:14)

避免回调缺失的最简单方法是使用相关的反应变量:

Tracker.autorun(function() {
  if (Meteor.userId()) {
    // do something when they've just logged in.
  }
});

autorun的上下文设置只会在Meteor.userId()的值发生变化时重新运行 - 即当他们登录时。

答案 1 :(得分:5)

从Meteor 0.7.2版本开始,可以使用服务器端钩子: Accounts.onLogin()

答案 2 :(得分:1)

来自login with password上的Meteor文档似乎已经为您需要做的回调:

Meteor.loginWithPassword(user, password, [callback])
  

回调功能   可选回调。被称为没有参数   成功,或者在失败时使用单个Error参数。

Meteor和external authentication services都支持登录回调。

答案 3 :(得分:0)

@Makita,谢谢你的回答。我确实看到了callback param但我在我的问题中没有提到的是我没有低级别的钩子,因为我使用{{loginButtons}}手柄助手来注入用户管理小部件(太棒了。)

这种方法的问题在于我在身份验证发生后无法访问回调,所以我创建了这个拉取请求,我希望将其合并以解决问题:

https://github.com/meteor/meteor/pull/479

有了这个,您应该可以致电:

Accounts.ui.config({
    onSuccess: function (err) {
        //perform addl authorization on Meteor.user() here
    }
});

答案 4 :(得分:0)

对于2014年参加此活动的人,您可以使用onLogin callback服务器端

Accounts.onLogin((OBJ) - >   user = ob.user )

答案 5 :(得分:0)

对于接受的答案,页面重新加载存在一个问题,这个问题搞砸了。我最终做了这样的事情(它使用角度流星但你应该得到要点,只需用自动运算代替Tracker)

.run(function($meteor,$rootScope,$state,$localstorage){
$meteor.autorun($rootScope, function(){
    var id = Meteor.userId();
    if(id == undefined || id == null){
        id = '';
    }
    if($localstorage.get('user_id','') != id){
        $localstorage.set('user_id',id);
        if(Meteor.userId()){
            //On login
            $state.go('profile',{user_id: Meteor.userId()});
        }else{
            //On logout
            $state.go('main');
        }
    }
});
});

我只推荐这个解决方案进行开发,当我停止使用默认帐户时 - 我将不得不实现更低级别的功能,而且不需要这样做。