Как использовать метод _linkWith для существующего пользователя? (Parse Server)

Я пытаюсь авторизовать пользователя через Facebook, для этого я использую метод _linkWith.

Я могу использовать метод _linkWith для нового пользователя. Например, этот код работает:

//I get the data with Facebook SDK
var data = {
  authData: {
    id: <user_id>,
    access_token: <user_access_token>
  }
};

const user = new Parse.User();
user._linkWith('facebook', { authData: data.authData })
  .then(user => {
    //Make something with the user
  })
  .catch(error => console.log(error));

Но я хочу дать пользователю возможность сначала зарегистрироваться по электронной почте и паролю, а затем войти в систему через Facebook или, наоборот, сначала зарегистрироваться через Facebook, а затем войти в систему по электронной почте и паролю. Но я не могу использовать метод _linkWith на существующего пользователя. Этот код не работает:

const randomstring = require('randomstring');

//I get the data with Facebook SDK
var data = {
  email: <user_email>,
  authData: {
    id: <user_id>,
    access_token: <user_access_token>
  }
};

const query = new Parse.Query(Parse.User);
query.equalTo('email', data.email);
query.first({ useMasterKey: true })
  .then(async user => {
    if (!user) {
      user = new Parse.User();
      user.set('password', randomstring.generate());
      user.set('username', data.email);
      user.set('email', data.email);
      user = await user.signUp(null);
    }
    user._linkWith('facebook', { authData: data.authData })
      .then(user => {
        //Make something with the user
      })
      .catch(error => console.log(error));
  })
  .catch(error => console.log(error));

Когда я запускаю этот код, я получаю сообщение об ошибке "Не удается изменить пользователя 8BNz8oMty7".

Мои вопросы:

  1. Можно ли использовать метод _linkWith для существующего пользователя, как в примере выше?
  2. Если да, то как?
  3. Если нет, как я могу авторизовать пользователя через Facebook с помощью Parse Server? В конце я хочу получить пользователя с sessionToken.

0 ответов

Опции MasterKey / SessionToken были добавлены в последней версии JS SDK и Parse Server

Чтобы ответить вам:

  1. Да, вы можете использовать его только для существующего пользователя, но убедитесь, что пользователь вошел в свою учетную запись Parse, чтобы иметь возможность это сделать.

  2. Вам необходимо использовать linkWith вместо _linkWith, поскольку _linkWith обесценился. * Кроме того, вам необходимо использовать sessionToken пользователя, чтобы иметь право редактировать его, как показано ниже:

`

userLoggedIn.linkWith("facebook", {authData: facebookAuthData},{ sessionToken: userLoggedIn.get("sessionToken") })

Вы можете найти полный пример кода здесь: /questions/43405005/parse-server-js-sdk-oshibka-206-pri-sohranenii-obekta-polzovatelya/43405021#43405021

* ссылка со ссылками на документацию:

Другие вопросы по тегам