如何使用预先验证的身份验证请求登录用户?
身份验证由https://www.netiq.com/处理,请求通过包含用户名,角色等的http标头传递给Meteor。如何在Meteor中填充用户对象并进行授权?
来自Java和Spring Security,我使用了https://github.com/spring-projects/spring-security/blob/master/web/src/main/java/org/springframework/security/web/authentication/preauth/PreAuthenticatedAuthenticationProvider.java
答案 0 :(得分:1)
在服务器上,使用类似这样的内容(未经测试)注册登录处理程序:
Accounts.registerLoginHandler("netiqPreauth", function(options) {
var self = this;
if (! options || ! options.netiqPreauth ||
! self.connection || ! self.connection.httpHeaders) {
return undefined;
}
// parseHeaders() parses the headers into a userDetails object.
var userDetails = parseHeaders(self.connection.httpHeaders);
// Code below assumes userDetails.username is unique
var existingUser = Meteor.user.findOne({ "services.netiq.username": userDetails.username });
if (existingUser) {
if (EJSON.stringify(existingUser.services.netiq) !== EJSON.stringify(userDetails)) {
Meteor.users.update(existingUser._id, {
$set: { "services.netiq": userDetails }, // Update details
$unset: { "services.resume.loginTokens": "" } // Force logout
});
}
return { userId: existingUser._id };
}
var newUserId = Accounts.insertUserDoc(options, {
profile: { /* whatever */ }, // Optional
services: {
netiq: userDetails
}
});
return {
userId: newUserId
};
});
只会在用户登录时更新与用户关联的详细信息。如果您有某种方式在用户的详细信息更改时通知服务器,您可以让服务器更新详细信息并删除现有信息与用户关联的令牌(如上面的代码中所示)。删除令牌会将用户注销到他们可能登录的任何位置。删除用户也会将用户注销。
如果您没有办法收到有关用户详细信息更改的通知,您也可以拨打Accounts.config({ loginExpirationInDays: some_suitably_short_time_period } )
(在客户端和服务器上)经常注销用户。< / p>
要在中记录用户,您需要在客户端上调用Accounts.callLoginMethod()
。如果您想在用户退出时自动将用户重新登录,您可以执行以下操作(未经测试):
Meteor.startup(function(){
Tracker.autorun(function () {
if (! Meteor.userId()) {
Accounts.callLoginMethod({
methodArguments: [{
netiqPreauth: true
}],
userCallback: function (error) {
if (error) {
// handle error
} else {
// handle success
}
}
});
}
});
});
}