如何在现有用户上使用_linkWith方法? (解析服务器)

时间:2018-09-24 05:38:32

标签: node.js parse-server parse-javascript-sdk

我正在尝试通过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的用户。

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

回答您:

  1. 是的,您只能在现有用户上使用它,但是请确保该用户已登录其Parse帐户才能使用它。

  2. 您需要使用linkWith而不是_linkWith,因为_linkWith已被贬值。*此外,您还需要使用用户的sessionToken才能对其进行编辑,如下所示:

`

Select * from tableName x where x.name is null

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

* link具有文档链接: