nodejs linkedin 登录护照nodejs

问题描述 投票:0回答:1

我们有用于 LinkedIn 社交登录的工作 Node.js 代码。 通过最新的更新,我们无法解决此代码的工作,这是我们当前的 Node.js 代码:

在之前的代码中,我们使用了

r_liteprofile
r_emailaddress
,并且成功完成了。现在我们在几天前创建了新应用程序,但无法解决这个问题。

有什么办法可以解决这个问题吗?当前错误是:“消息”:“无法获取用户配置文件”

enter image description here

我预计更改范围名称会起作用,因为以前的代码在旧 API v1 上成功运行,范围为

r_emailaddress
r_liteprofile
..

passport.use(
    new linkedinStrategy(
      {
        clientID: process.env.LINKEDIN_CLIENT_ID,
        clientSecret: process.env.LINKEDIN_CLIENT_SECRET,
        callbackURL: 'http://localhost:5000/server/api/users/linkedin/callback',
        scope: ['openid', 'profile', 'email']
      },
      async (accessToken, refreshToken, done) => {
        try {
          const userInfo = await linkedin.getProfile(
            process.env.LINKEDIN_CLIENT_ID,
            process.env.LINKEDIN_CLIENT_SECRET,
            accessToken
          );

      console.log(userInfo)
      
      let existingUser = await User.findOne({ email: userInfo.email });

      if (existingUser) {
        return done(null, existingUser);
      }

      const newUser = new User({
        name: userInfo.name,
        email: userInfo.email,
        accessToken: accessToken,
        refreshToken: refreshToken,
        type: 'linkedin'
      });

      await newUser.save();

      done(null, newUser);
    } catch (err) {
      console.log(err)
      done(err, false);
    }
  }
)

);`

javascript node.js passport.js
1个回答
0
投票

问题是 LinkedIn 不再支持范围

r_liteprofile
r_emailaddress
。您需要改用新范围
r_email
r_basicprofile

要修复代码,您需要将作用域数组更改为:

scope: ['openid', 'profile', 'email', 'basicprofile']

完成此更改后,您的代码应该可以再次运行。

这是具有正确范围的完整代码:

passport.use(
    new linkedinStrategy(
      {
        clientID: process.env.LINKEDIN_CLIENT_ID,
        clientSecret: process.env.LINKEDIN_CLIENT_SECRET,
        callbackURL: 'http://localhost:5000/server/api/users/linkedin/callback',
        scope: ['openid', 'profile', 'email', 'basicprofile']
      },
      async (accessToken, refreshToken, done) => {
        try {
          const userInfo = await linkedin.getProfile(
            process.env.LINKEDIN_CLIENT_ID,
            process.env.LINKEDIN_CLIENT_SECRET,
            accessToken
          );

          console.log(userInfo)
          
          let existingUser = await User.findOne({ email: userInfo.email });

          if (existingUser) {
            return done(null, existingUser);
          }

          const newUser = new User({
            name: userInfo.name,
            email: userInfo.email,
            accessToken: accessToken,
            refreshToken: refreshToken,
            type: 'linkedin'
          });

          await newUser.save();

          done(null, newUser);
        } catch (err) {
          console.log(err)
          done(err, false);
        }
      }
    )
);
© www.soinside.com 2019 - 2024. All rights reserved.