1

使用流星,我希望能够user在他们使用外部服务登录(经过身份验证)以获得他们的授权声明后增加记录。

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

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

我知道有一个allow功能可以Meteor.Collection作为授权用户访问集合的一种方式——这正是claims我打算用来增加用户来确定授权的地方。

有谁知道登录过程中有一个钩子可以让我这样做吗?

4

6 回答 6

14

解决缺少回调的最简单方法是使用相关的反应变量:

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

上下文设置autorun将仅在值更改时重新运行Meteor.userId()- 即当他们登录时。

于 2012-11-13T23:36:28.630 回答
5

从 Meteor 0.7.2 版本开始,有一个服务器端可用的钩子: Accounts.onLogin()

于 2014-03-19T11:32:41.267 回答
1

从 Meteor docs on login with password看来,您需要做的事情似乎已经有一个回调:

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

回调函数可选回调。调用成功时不带参数,或失败时使用单个 Error 参数。

Meteor 和外部身份验证服务都支持登录回调。

于 2012-11-13T13:08:15.167 回答
0

@Makita,谢谢你的回答。我确实看到了那个callback参数,但我在问题中没有提到的是我没有低级挂钩,因为我正在使用{{loginButtons}}车把助手来注入用户管理小部件(这太棒了)。

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

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

有了这个,你应该可以调用:

Accounts.ui.config({
    onSuccess: function (err) {
        //perform addl authorization on Meteor.user() here
    }
});
于 2012-11-13T18:41:00.073 回答
0

对于 2014 年来这里的人,您可以使用onLogin 回调服务器端

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

于 2014-11-29T06:52:22.800 回答
0

对于接受的答案,页面重新加载存在一个问题,该问题使该解决方案变得混乱。我最终做了这样的事情(它使用角流星,但你应该明白要点,只需用自动运行代替跟踪器)

.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');
        }
    }
});
});

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

于 2015-06-15T18:11:54.783 回答