繁体   English   中英

使用 Node.js 和 express.js 实现护照-facebook-token 时出现 500 内部服务器错误

[英]500 Internal Server Error in passport-facebook-token implementation using Node.js and express.js

我正在使用https://www.npmjs.com/package/passporthttps://www.npmjs.com/package/passport-facebook-token ZBB30E85411B546DF4129672

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

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;

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

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

Moreover, I got the token from Facebook and when I request my API with the provided token, Facebook can authenticate and return the user profile but after authentication and creating a new user or if the user already exists in DB, then it does not go to我想为用户生成 JWT 令牌并返回给用户的路由处理程序。

我在 postman 中收到以下错误: 500 internal server error

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

下面的代码工作得很好:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM