gpt4 book ai didi

javascript - 如何在 passport-facebook 身份验证中传递额外数据

转载 作者:搜寻专家 更新时间:2023-10-31 23:26:42 24 4
gpt4 key购买 nike

我正在尝试在 Node.js 中编写一个 Web 应用程序,它使用 passport-facebook 身份验证策略。默认情况下,示例中提供的机制通过将用户重定向到 Facebook API 来工作,用户可以在其中输入用户名和密码以进行登录。 Facebook 验证用户后,它会将 token 传回我的应用程序中的回调 URL。

现在这些东西适用于我的应用程序。我可以毫无问题地使用 Facebook 登录。但是我想在尝试登录时将一个额外的字段传递给服务器。

基本上我的计划是在我的主页中添加一个TextField 和一个Login Button。登录成功后,当回调函数执行时,我想从这个回调中捕获 TextField 的值。有什么办法吗?非常感谢任何帮助。

这是我的 HTML 页面的主体

<body>
<div class="container">

<div class="jumbotron text-center">
<p>Login or Register with:</p>
<a href="/auth/facebook" class="btn btn-primary"><span class="fa fa-facebook"></span> Facebook</a>
</div>
</div>
</body>

这是我的 nod.js 代码:

app.get('/auth/facebook', passport.authenticate('facebook'));

app.get('/auth/facebook/callback', passport.authenticate('facebook', {
successRedirect : '/dashboard',
failureRedirect : '/'
}));

app.get('/dashboard', isLoggedIn, function(req, res){
res.render('dashboard.ejs', {
user : {
name : req.user.facebook.name,
profilePic : req.user.facebook.profilePic
}
});
});

基本上我只想在我的 LogIn 按钮之前添加一个额外的 TextField。从 /dashboard 路径,我想获取那个 TextField 的值。所以我的 /dashboard 代码看起来像这样:

app.get('/dashboard', isLoggedIn, function(req, res){
res.render('dashboard.ejs', {
user : {
role: VALUE_FROM_TEXT_FIELD,
name : req.user.facebook.name,
profilePic : req.user.facebook.profilePic
}
});
});

所以我有一个双重问题:1. 如何从前端传递此 TextField 值。它应该在 Form 内还是什么?2. 如何在 /dashboard 路由中获取 TextField 的值?

最佳答案

您是否考虑过使用自定义回调而不是标准的 Passport.js 回调?

“本地”策略的示例是:

app.get('/login', function(req, res, next) {
passport.authenticate('local', function(err, user, info) {
if (err) { return next(err); }
if (!user) { return res.redirect('/login'); }
req.logIn(user, function(err) {
if (err) { return next(err); }
return res.redirect('/users/' + user.username);
});
})(req, res, next);
});

您应该能够在请求中传入附加值并在回调中处理它。

编辑:对于您的特定场景,您可能正在查看与此类似的内容...

app.get('/auth/facebook/callback', function (req, res, next) {
passport.authenticate('facebook', function (err, user, info) {
if (err) {
return next(err);
// let the next route handler do its thing...
// or you can handle the error yourself within this
// callback.
}

// if the user returns as nothing (doesn't exist) then redirect
if (!user) {
// this takes the place of failureRedirect
return res.redirect('/');
}
req.logIn(user, function (err) {
if (err) {
return next(err); // again - on error, 'next' depending on your requirement.
}
// this takes the place of successRedirect
return res.redirect('/dashboard');
});
})(req, res, next);
});

希望这能澄清 :)

关于javascript - 如何在 passport-facebook 身份验证中传递额外数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37939044/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com