【问题标题】:passport-google-oauth Failed to fetch user profile ECONNRESETpassport-google-oauth 无法获取用户配置文件 ECONNRESET
【发布时间】:2022-11-11 14:29:20
【问题描述】:

在我的meanjs网站上通过谷歌登录三年后突然停止工作,没有对代码进行任何更改。 发送的请求:

/**
 * Module dependencies
 */
var passport = require('passport'),
  GoogleStrategy = require('passport-google-oauth').OAuth2Strategy,
  users = require('../../controllers/users.server.controller');

module.exports = function (config) {
  // Use google strategy
  passport.use(new GoogleStrategy({
    clientID: config.google.clientID,
    clientSecret: config.google.clientSecret,
    callbackURL: config.google.callbackURL,
    passReqToCallback: true,
    scope: ['profile', 'email']
  },
    function (req, accessToken, refreshToken, profile, done) {
      // Set the provider data and include tokens
      var providerData = profile._json;
      providerData.accessToken = accessToken;
      providerData.refreshToken = refreshToken;
      // Create the user OAuth profile
      var providerUserProfile = {
        firstName: profile.name.givenName,
        lastName: profile.name.familyName,
        displayName: profile.displayName,
        email: profile.emails[0].value,
        username: profile.username,
        profileImageURL: (providerData.picture) ? providerData.picture : undefined,
        provider: 'google',
        providerIdentifierField: 'id',
        providerData: providerData
      };

      // Save the user OAuth profile
      users.saveOAuthUserProfile(req, providerUserProfile, done);
    }));
};

这成功重定向到谷歌同意屏幕,登录后回调被触发:


  passport.authenticate('google', {},function (err, user, info) {
    if (err) {
      console.log(err);
      return res.redirect('/authentication/signin?err=' + encodeURIComponent(errorHandler.getErrorMessage(err)));
    }
    if (!user) {
      return res.redirect('/authentication/signin');
    }
.....

并返回错误“无法获取用户配置文件”,这是 err var 的 console.log:


{ InternalOAuthError: Failed to fetch user profile
    at C:\Users\Administrator\Documents\printer\mean-printer\node_modules\passport-google-oauth20\lib\strategy.js:99:19
    at ClientRequest.<anonymous> (C:\Users\Administrator\Documents\printer\mean-printer\node_modules\oauth\lib\oauth2.js
:162:5)
    at emitOne (events.js:116:13)
    at ClientRequest.emit (events.js:211:7)
    at TLSSocket.socketErrorListener (_http_client.js:401:9)
    at emitOne (events.js:116:13)
    at TLSSocket.emit (events.js:211:7)
    at emitErrorNT (internal/streams/destroy.js:66:8)
    at _combinedTickCallback (internal/process/next_tick.js:139:11)
    at process._tickDomainCallback (internal/process/next_tick.js:219:9)
  name: 'InternalOAuthError',
  message: 'Failed to fetch user profile',
  oauthError: { Error: read ECONNRESET
    at TLSWrap.onread (net.js:622:25) errno: 'ECONNRESET', code: 'ECONNRESET', syscall: 'read' } }

再说一遍,这是工作3年后突然开始的。没有进行任何代码更改。

有任何想法吗?

干杯

【问题讨论】:

    标签: node.js google-oauth passport-google-oauth


    【解决方案1】:

    似乎将数据库保存在 serializeUser() 而不是策略回调中是可行的。

    【讨论】:

      猜你喜欢
      • 2020-08-05
      • 2022-07-12
      • 2011-11-13
      • 2022-08-16
      • 2016-06-04
      • 1970-01-01
      • 2019-12-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多