使用meteor,我希望能够在他们使用外部服务登录(已验证)后获得user
记录,以获取他们的授权声明。
更新
我正在使用{{loginButtons}}
把手帮助器小部件。
目前,我看到在创建新用户期间可以挂钩的Accounts.validateNewUser
和Accounts.onCreateUser
。这些在最初会有所帮助,但我的需要是经常性的。
我知道有allow
函数挂起Meteor.Collection
作为授权用户访问集合的方法 - 这正是我使用claims
的地方我打算用增加用户来确定授权。
在登录过程中是否有人知道可以执行此操作的钩子?
答案 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');
}
}
});
});
我只推荐这个解决方案进行开发,当我停止使用默认帐户时 - 我将不得不实现更低级别的功能,而且不需要这样做。