Как связать / авторизовать учетные записи вместе, используя Passport.js - PullRequest
0 голосов
/ 09 мая 2019

Проблема, с которой я столкнулся, заключается в том, что я пытаюсь авторизовать / связать несколько учетных записей в моем приложении вместе, используя passport.js, но не могу найти способ сделать это легко.

Passport.js предоставляет решение для "Авторизации" учетных записей, но я не знаю, как это реализовать, поскольку я не очень разбираюсь в технологиях, но пытаюсь стать лучше.

  • Стратегия Google для аутентификации
passport.use(new GoogleStrategy({
    clientID: process.env.GOOGLE_CLIENT_ID,
    clientSecret: process.env.GOOGLE_CLIENT_SECRET,
    callbackURL: "http://localhost:3000/auth/google/callback",
    userProfileURL: "https://www.googleapis.com/oauth2/v3/userinfo"

  },
  function(accessToken, refreshToken, profile, cb) {

    console.log(profile);

    Customer.findOrCreate({
        googleId: profile.id,
        firstName: profile.name.givenName,
        lastName: profile.name.familyName
      },
      function(err, user) {
        return cb(err, user);
      });
  }
));
  • Обратный звонок Google

router.get('/auth/google/callback',
  passport.authenticate('google', { failureRedirect: '/signin' }),
  function(req, res) {
    // Successful authentication, redirect home.
    res.redirect('/');
  });

  • Модель клиента
const customerSchema = new mongoose.Schema({

  googleId: String,
  facebookId: String,
  firstName: String,
  lastName: String,
  username: String,
  password: String,
  address: [addressSchema],
  role: {
    type: String,
    default: 'customer'
  }
});

Идеальным сценарием было бы то, что пользователь может успешно создать локальную учетную запись, а затем в будущем пользователь решил создать учетную запись Google, после чего учетная запись Google связывается с локальной учетной записью пользователя, а не создается отдельно.

Большое спасибо

Этан

...