parse-server icon indicating copy to clipboard operation
parse-server copied to clipboard

`linkWith` not returns a `sessionToken` in CloudCloud

Open puny-d opened this issue 10 months ago • 18 comments
trafficstars

I'm encountering an issue with linkWith in Cloud Code on Parse-Server 7.2. When linking a user with a third-party provider, the method does not return a sessionToken as expected. This breaks the intended behavior, where the user should be logged in automatically after linking.

Steps to Reproduce Here is the code snippet that demonstrates the issue:

Parse.Cloud.define(
  'auth',
  async req => {
    const { authData, nickname, email } = req.params;

    const authName = Object.keys(authData)[0];

    if (!authName) {
      throw new Parse.Error(1000, {
        code: 1001,
        msg: 'invalid authData',
      });
    }
    const provider = getAuthProvider(authName, authData?.[authName]);

    if (!provider) {
      throw new Parse.Error(1000, {
        code: 1001,
        msg: 'invalid authData',
      });
    }

    let hasUser;

    if (email) {
      const query = new Parse.Query(Parse.User);
      query.equalTo('email', email);
      hasUser = await query.first({ useMasterKey: true });
      req.log.info('hasUser', hasUser);
    }

    const user = new Parse.User();

    if (!hasUser) {
      user.set('email', email);
      user.set('nickname', nickname);
    }

    return user.linkWith(provider, authData?.[authName]);

  },
  {
    fields: {
      authData: {
        required: true,
        type: Object,
      },
      nickname: {
        required: true,
        type: String,
      },
      email: {
        type: String,
        options: email => {
          return /^[\w-\.]+@([\w-]+\.)+[\w-]{2,12}$/.test(email);
        },
      },
    },
  }
);

Attempt to link the user with a provider using linkWith. Observe that no sessionToken is returned.

Environment Parse Server Version: 7.2

puny-d avatar Jan 09 '25 02:01 puny-d