如何在使用 Meteor 登录过程中挂接到身份验证回调?



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

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

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

我知道有一个allow函数挂在Meteor.Collection上,作为授权用户访问集合的一种手段 - 这正是我将使用我打算增强用户的claims来确定授权的地方。

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

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

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

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

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

从使用密码登录的 Meteor 文档中,似乎已经有一个回调用于您需要做的事情:

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

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

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

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

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

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

有了这个,您应该能够调用:

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

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

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

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

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

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

最新更新