1

我正在尝试通过 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. 如果没有,我如何使用 Parse Server 通过 facebook 授权用户?最后,我想得到一个带有 sessionToken 的用户。
4

2 回答 2

0

回答你:

  1. 是的,您只能在现有用户上使用它,但请确保用户登录他的 Parse 帐户才能执行此操作。

  2. 您需要使用 linkWith 而不是 _linkWith,因为 _linkWith 已被贬值。* 此外,您需要使用用户的 sessionToken,才能被授权编辑它,如下:

`

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

您可以在此处找到完整的代码示例:https ://stackoverflow.com/a/38718115/3562050

*link带有文档链接:

于 2020-02-12T14:16:30.397 回答
0

最新版本的 JS SDK 和 Parse Server 中添加了 MasterKey / SessionToken 选项

于 2019-05-02T05:53:16.897 回答