下面是我对passport facebook策略的配置:

    passport.use(new FacebookStrategy({
        clientID: ".....",
        clientSecret: ".....",
        callbackURL: "http://localhost:1337/register/facebook/callback",
    },
    facebookVerificationHandler
    ));

下面是facebookVerificationHandler:

var facebookVerificationHandler = function (accessToken, refreshToken, profile, done) { 
    process.nextTick(function () {    
        .......
    });    
};

有没有办法访问facebookVerificationHandler中的请求对象?

用户使用LocalStrategy注册到我的网站,但之后他们将能够添加他们的社交帐户,并将这些帐户与他们的本地帐户相关联.调用上述回调时,当前登录的用户已在req中可用.用户,所以我需要访问req以将用户与facebook帐户关联.

这是正确的实施方式还是应该考虑另一种方式?

谢谢

推荐答案

因此,我通常在有请求时设置策略,而不是在应用程序启动时设置策略.例如:

app.get(
    '/facebook/login'
    ,passport_setup_strategy()
    ,passport.authenticate()
    ,redirect_home()
);

var isStrategySetup = false;
var passport_setup_strategy = function(){
    return function(req, res, next){
        if(!isStrategySetup){

            passport.use(new FacebookStrategy({
                    clientID: ".....",
                    clientSecret: ".....",
                    callbackURL: "http://localhost:1337/register/facebook/callback",
                },
                function (accessToken, refreshToken, profile, done) { 
                    process.nextTick(function () {    
                        // here you can access 'req'
                        .......
                    });    
                }
            ));

            isStrategySetup = true;

        }

        next();
    };
}

使用此选项,您将可以访问验证处理程序中的请求.

Node.js相关问答推荐

仅当所需文档是最后一个文档时才更新MongoDB,否则插入

已知NPM无法在node.js V12上运行的问题

try 使用Express和连接池将数据插入MySQL数据库时出现拒绝访问错误

JsonwebToken过期后如何注销和清除cookie?

如何使用多个参数完成

如何使用NodeJS在mongodb中更新文档

运行本地移动自动化测试时,在onPrepare钩子中,ERROR @wdio/cli:utils: A service failed in the 'onPrepare'

使用pm2启动服务器

为什么运行 yarn 命令会出错 - yargs-parser的完整性判断失败

图像存储在后端文件夹中,但使用 multer 和 react.js 在前端找不到

node.js 中 pdfkit-tables 中的垂直线

制作一个接受命令行参数的脚本

在 ExpressJS 中将变量传递给 JavaScript

Mongodb v4.0 Transaction, MongoError: Transaction numbers are allowed on a replica set member or mongos

如何在 Mongoose 模式中设置数组大小限制

如何在 AWS 上的 Amazon Linux AMI 中自动启动 node.js 应用程序?

错误:大多数中间件(如 bodyParser)不再与 Express Bundle

如何在 Node.js 中使用 chmod

User.findOrCreate 函数是做什么的,什么时候在Passport 中调用它?

如何从 npm 注册表中删除 npm 包?