javascript - 在 Passport FacebookTokenStrategy 和 GoogleStrategy 中获取子域

标签 javascript node.js passport.js passport-facebook

我正在构建一个带有通配符子域的 node.js 应用程序。每个子域将是应用程序的一个单独部分,该应用程序将根据子域对用户进行单独的身份验证。

例如,假设我的应用程序将具有子域 abc.domain.comxyz.domain.com 以及以下用户

User1@gmail.com signs up for abc.domain.com
User2@yahoo.com signs up for xyz.domain.com 
User3@msn.com signs up for both abc.domain.com and xyz.domain.com

每个用户只能访问他们注册的子域。所以 User1@gmail.com 应该能够登录到 abc.domain.com 但在 xyz.domain.com 应该被拒绝/p>

通常我会使用 req.get('host') 获取子域,然后从那里提取子域,但据我所知,passport.js 没有 req 参数。无论如何,我是否可以获取用户尝试登录的当前站点的子域名?以下是从 https://github.com/drudge/passport-facebook-token 复制的 passport-facebook-token 代码

var FacebookTokenStrategy = require('passport-facebook-token');

passport.use(new FacebookTokenStrategy({
        clientID: FACEBOOK_APP_ID,
        clientSecret: FACEBOOK_APP_SECRET
    }, function(accessToken, refreshToken, profile, done) {
        // SQL statement will go here that will check whether a user is signed up for the subdomain they are logging into. It will also check if the user exists in the database
    });
  }
));

最佳答案

我找到了解决方案,所以回答了我自己的问题,以防万一有人需要知道如何使用 passport.js 让 req 出现在任何策略中,您需要做的就是将 passReqToCallBack 设置为 true。

下面是更新后的代码

passport.use(new FacebookTokenStrategy({
        clientID: FACEBOOK_APP_ID,
        clientSecret: FACEBOOK_APP_SECRET,
        passReqToCallback: true   // Added for req to show in callback
    }, function(req, accessToken, refreshToken, profile, done) {
        // SQL statement will go here that will check whether a user is signed up for the subdomain they are logging into. It will also check if the user exists in the database
    });
  }
));

关于javascript - 在 Passport FacebookTokenStrategy 和 GoogleStrategy 中获取子域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52434198/

相关文章:

javascript - 如何在选择菜单项时调用 Javascript 函数?

node.js - 当 auth header 更改时 Express 创建不同的 session

javascript - 从 DynamoDB 获取有限且排序的项目页面?

javascript - 是否可以在 React 服务器组件中访问 DOM?

node.js - Heroku + Socket.io 有时有效有时不行

javascript - 在Javascript中绑定(bind)回调函数? (不要与 Function.prototype.bind() 混淆)

node.js - 使用 Passportjs 构建 2 登录系统(用户和管理员)

node.js - NodeJS - Passport 登录时出现 404 错误

javascript - 使用 XMLHttpRequest 时如何向用户显示实际的网络错误?

node.js - 巴贝尔预设-es2015 : No compatible version found: babel-helper-hoist-variables@^6. 6.5