Meteor 提供了一组loginWithExternalService()
方法(例如loginWithTwitter()
),允许用户创建帐户或使用这些第三方身份验证提供程序重新登录。
但是有没有办法区分这两种行为?即让人们使用 Twitter登录,而不必让他们通过相同的操作注册它?
实际用例是针对注册受限的站点,您有一个用于注册的私有 URL ,但有一个用于登录的公共页面。我正在寻找一种方法来防止人们仅通过首次登录就能够创建帐户。
Meteor 提供了一组loginWithExternalService()
方法(例如loginWithTwitter()
),允许用户创建帐户或使用这些第三方身份验证提供程序重新登录。
但是有没有办法区分这两种行为?即让人们使用 Twitter登录,而不必让他们通过相同的操作注册它?
实际用例是针对注册受限的站点,您有一个用于注册的私有 URL ,但有一个用于登录的公共页面。我正在寻找一种方法来防止人们仅通过首次登录就能够创建帐户。
您可能会挂接到Accounts.onCreateUser
(服务器端)
这样的事情可能会有所帮助:
服务器端js
Accounts.onCreateUser(function(options, user) {
//Check if this user can be created, if not throw an error
var canCreate = false
if(!canCreate)
throw new Meteor.Error(403, 'You cant sign up', "Sorry you can only sign in but not sign up");
//Create the user like normal if we can.
if (options.profile)
user.profile = options.profile;
return user;
});
抛出错误会阻止该方法返回和创建帐户。它仅在有人正在创建帐户并且还没有帐户时运行(也有外部服务提供商)
在客户端上,您可以处理错误,但在accounts-ui
包上您会收到“内部服务器错误”消息。您可能可以将其自定义为“您需要成为管理员”或其他内容