【问题标题】:500 Internal Server Error in passport-facebook-token implementation using Node.js and express.js使用 Node.js 和 express.js 实现护照-facebook-token 时出现 500 内部服务器错误
【发布时间】:2022-09-29 00:29:48
【问题描述】:

我正在使用 https://www.npmjs.com/package/passporthttps://www.npmjs.com/package/passport-facebook-token npm 包实现 facebook-auth

这是我在护照​​配置文件中的代码:

passport.use(
  new FacebookTokenStrategy(
    {
      clientID: config.FACEBOOK_CLIENT_ID,
      clientSecret: config.FACEBOOK_CLIENT_SECRET,
      fbGraphVersion: \'v3.0\',
    },
    (accessToken, refreshToken, profile, done) => {
      User.findOne(
        { \'facebookProvider.id\': profile.id },
        (error: any, user: any) => {
          if (!user) {
            const newUser = new User({
              name: profile.displayName,
              email: profile.emails[0].value,
              facebookProvider: { id: profile.id, token: accessToken },
              imageProfile: profile.photos[0].value,
            });
            newUser.save((error, result) => {
              if (error) {
                return done(error);
              }
              return done(null, result);
            });
          }
          return done(error, user);
        }
      );
    }
  )
);

以下是我的路线处理程序:

const authRouter = express.Router();

authRouter
  .route(\'/facebook\')
  .get(
    passport.authenticate(\'facebook-token\'),
    async (req: Request, res: Response) => {
      if (req.user) {
        const accessToken: String = jwt.sign(
          { user: req.user },
          config.JWT_SECRET_KEY,
          {
            expiresIn: config.TOKEN_LIFE_TIME,
          }
        );
        return sendSuccesResponse(res, 200, accessToken);
      }
      return sendErrorResponse(res, 400, \'Something went wrong\');
    }
  );

export default authRouter;

另外,我在作为 API 入口点的 index.ts 文件中初始化了护照,并导入了护照配置文件:

import \'./config/passport\';
.
.
.
app.use(passport.initialize());
app.use(\'/api/v1/oauth2\', authRouter);

此外,我从 Facebook 获得了令牌,当我使用提供的令牌请求我的 API 时,Facebook 可以进行身份​​验证并返回用户个人资料,但在身份验证和创建新用户之后,或者如果用户已经存在于数据库中,那么它不会转到我想为用户生成 JWT 令牌并返回给用户的路由处理程序。

我在邮递员中收到以下错误: 500 internal server error

    标签: node.js typescript jwt passport.js passport-facebook-token


    【解决方案1】:

    经过一番挣扎,我发现我必须为passport.authenticate函数提供第二个参数{ session: false }

    下面的代码工作得很好:

    passport.authenticate('facebook-token', { session: false })
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-02-10
      • 2019-03-21
      • 1970-01-01
      • 2016-06-23
      • 2023-03-10
      • 1970-01-01
      • 1970-01-01
      • 2018-10-01
      相关资源
      最近更新 更多