我扩展了实现逻辑的撇号表达式模块,以检查请求头中的cookie。此检查中的一个情况是自动登录用户。如果一个cookie键/val匹配一个预设的标志值,那么我想对aposUsersSafe集合中的用户进行查找(基于电子邮件地址),如果用户存在于集合中,则自动将他签名到cms中。
目前,我已经通过基于电子邮件为用户运行mongo查询来实现用户查找:
var collection = db.collection('aposUsersSafe');
collection.find({email: email}).toArray(function (err, result) {
if (err) {
deferred.reject(new Error(error));
} else if (result.length) {
deferred.resolve(result);
} else {
console.log('User not found');
}但我看到撇号登录模块提供了通过护照进行身份验证和权限的方法。扩展撇号登录和护照是否是实现这一自动登录解决方案的方法?谢谢!
发布于 2016-10-03 23:20:34
正如我在回答你之前的问题时提到的,我是彭克大道阿后托普的主要建筑师。
实际上,在我们的演示项目中有一个完整的autologin实现,可以借用(:我们希望自动登录用户,以便人们在看到用户界面之前不会放弃。
它很短,所以在这里:
module.exports = {
construct: function(self, options) {
self.pageBeforeSend = function(req, callback) {
if (!req.cookies.demo_autologin) {
return self.apos.users.find(req, { username: 'admin' }).permission(false).toObject(function(err, user) {
if (err) {
return callback(err);
}
if (!user) {
return callback(null);
}
req.login(user, function(err) {
if (err) {
return callback(err);
}
// Start a whole new request, but logged in. After this they
// have the cookie so they can log out and back in normally if they want
req.res.cookie('demo_autologin', 1);
return req.res.redirect('/');
});
});
}
return callback(null);
};
}
};当然,您需要通过将demo-autologin模块与其他模块一起包含在modules属性中,从而在app.js中启用它。
下面是这个模块的工作方式:
pageBeforeSend方法,该方法在页面被发送到浏览器之前被调用。demo_autologin cookie是否已经设置。admin模块的find方法提供的游标查找apostrophe-users用户,使用permission(false)绕过权限检查,这些检查通常会限制查找的内容。req.login,这是passport提供的一种方法,它使以编程方式登录用户变得非常容易。req.res.cookie设置cookie。res对象始终可以从req访问,反之亦然。在Apostrophe中,通常只传递req,因为req.res是可用的,而且在大多数情况下,您将向req添加更多数据,而不是直接响应。当然,你会根据不同的标准来决定寻找哪个用户,而不是“让每个人都管理”,但是听起来你对这个部分有一个处理方法,这段代码应该很容易适应你的需求。
(在我看来,如果用户拒绝接受一个普通的旧会话cookie,这段代码可能会遇到重定向循环。无论如何,常规登录都不起作用,但如果您愿意,可以通过查询字符串跟踪情况,并告诉用户,如果他们两次来到这里,就启用cookie。)
这个答案已经更正为将req参数包含到find中。
https://stackoverflow.com/questions/39836621
复制相似问题