Authentication 如何不使用用户名而是使用不同的选择器登录?
我想实现“使用用户名或customerID(决不能同时使用用户名或customerID)和密码登录”,让用户在第一个字段中输入用户名或其customerID,在第二个字段中输入密码Authentication 如何不使用用户名而是使用不同的选择器登录?,authentication,meteor,Authentication,Meteor,我想实现“使用用户名或customerID(决不能同时使用用户名或customerID)和密码登录”,让用户在第一个字段中输入用户名或其customerID,在第二个字段中输入密码 accounts password软件包允许我通过调用 Meteor.loginWithPassword(<username>,<password>); OR var selector = {username: <username>
accounts password
软件包允许我通过调用
Meteor.loginWithPassword(<username>,<password>);
OR
var selector = {username: <username>}
Meteor.loginWithPassword(selector, <password>);
Meteor.loginWithPassword(,);
或
变量选择器={username:}
Meteor.loginWithPassword(选择器,);
我尝试使用选择器选择用户
var selector = {customerID: <customerID>}
var选择器={customerID:}
但我似乎只能用\u id
、用户名
或电子邮件
来选择一个用户,否则我会得到一个匹配失败
错误
没有任何其他方法可以让用户在没有
用户名
、\u id
或电子邮件的情况下登录吗?此解决方法是我所达到的最远的解决方法:
1.首先使用customerID
检索用户名
或\u id
。
2.然后使用检索到的用户名
/\u id
和密码登录。
//服务器
流星法({
findIDFromCustomerID:函数(customerID){
user=Meteor.users.findOne({customerID:customerID});
如果(用户){
返回用户。\u id;
}否则{
抛出新流星。错误(403,“未找到用户”);
}
}
});
//客户
Meteor.call('findIDFromCustomerID',函数(err,data){
如果(数据和错误){
Meteor.loginWithPassword({id:data},);
}
});
但在这方面,我觉得我给行为不端的用户留下了一个很小的窗口。这是我所达到的最远的解决方法:
1.首先使用customerID
检索用户名
或\u id
。
2.然后使用检索到的用户名
/\u id
和密码登录。
//服务器
流星法({
findIDFromCustomerID:函数(customerID){
user=Meteor.users.findOne({customerID:customerID});
如果(用户){
返回用户。\u id;
}否则{
抛出新流星。错误(403,“未找到用户”);
}
}
});
//客户
Meteor.call('findIDFromCustomerID',函数(err,data){
如果(数据和错误){
Meteor.loginWithPassword({id:data},);
}
});
但在这方面,我觉得我给行为不端的用户留下了一个小窗口。目前,这些是唯一允许的字段。您可以尝试在服务器上包装login
方法,或者注册自己的登录处理程序。这并不是一件小事,因为处理程序注册没有很好的文档记录。@MasterAM,从customerID检索_id然后使用_id登录是否会造成安全问题?它本身可能不会造成安全威胁,但我不认为自己是安全专家。这是一点信息,您可能不感兴趣以这种方式公开。用户ID可能存储在其他集合中,并且对客户端可见,但是您应该考虑用户如何检索它们。一般来说,知道用户(或者,在这个问题上,任何对象)的id,不应该授予拥有该知识的人任何特权。不应将其用作共享机密。目前,这些是唯一允许使用的字段。您可以尝试在服务器上包装login
方法,或者注册自己的登录处理程序。这并不是一件小事,因为处理程序注册没有很好的文档记录。@MasterAM,从customerID检索_id然后使用_id登录是否会造成安全问题?它本身可能不会造成安全威胁,但我不认为自己是安全专家。这是一点信息,您可能不感兴趣以这种方式公开。用户ID可能存储在其他集合中,并且对客户端可见,但是您应该考虑用户如何检索它们。一般来说,知道用户(或者,在这个问题上,任何对象)的id,不应该授予拥有该知识的人任何特权。不应将其用作共享机密。
//SERVER
Meteor.methods({
findIDFromCustomerID: function(customerID){
user = Meteor.users.findOne({customerID: customerID});
if(user){
return user._id;
}else{
throw new Meteor.Error(403,"User not found");
}
}
});
//CLIENT
Meteor.call('findIDFromCustomerID',<customerID>,function(err,data){
if(data && !err){
Meteor.loginWithPassword({id: data}, <password>);
}
});