[英]Passport js authenticate by url
我正在为我的应用程序使用 Express JS 和 Passport JS。
我想让新用户有机会通过特定 URL 自动登录一次。 我可以使用 URL 中的信息从数据库中获取用户,所以我有一个 User 对象(带有 ID、电子邮件、散列密码等),但我不知道如何使用通行证来验证用户和登录。
我尝试使用从数据库中获取的用户对象执行以下函数:
req.login(user, function(err) {
if (err) { return next(err); }
return res.redirect('/users/' + req.user.username);
});
来源: http : //passportjs.org/guide/login/
但这没有用。 猜猜这只是因为用户对象包含散列密码......任何曾经尝试过这个并且可以告诉我它是如何工作的人吗?
也许https://github.com/yarax/passport-url策略对你有用
基本逻辑正在从 url 获取参数
UrlStrategy.prototype.authenticate = function(req, options) {
var self = this;
function verified(err, user, info) {
if (err) { return self.redirect(self.failRedirect); } // redirect in fail
self.success(user, info); // done callback
}
this._verify(req.query[this.varName], verified);
};
这里的完整示例https://github.com/yarax/passport-url/blob/master/index.js
嘿,虽然@Rax Wunter 是完全正确的,但我刚看到这个问题,想说做你在这里做的事情不是一个好主意。 您永远不应该在 URL 字符串中传递散列密码。 这是一个非常糟糕的安全问题。
你应该做的是使用类似JSON Web Token (JWT) 的东西。 有很多库可以帮助解决这个问题,但基本流程是这样的:
上面的这个策略真的很棒,因为它意味着你可以安全地以受信任的方式登录某人,而不会危及安全或泄露密码哈希。
为此不需要任何额外的模块或通行证策略。 根据您的用例调整以下代码;
router.get('/url/:token', (req, res) => {
User.findOne({token: req.params.token}, (err, user) => {
req.login(user, {}, function(err) {
if (err) { console.error(err); }
else return res.redirect("/home.html");
});
});
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.