【发布时间】:2022-09-29 00:29:48
【问题描述】:
我正在使用 https://www.npmjs.com/package/passport 和 https://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