如何正确重定向和发送当前登录的变量?

How to redirect and send variables of the current logged in correctly?

你好,你好吗?我是 javascript 的新手,我需要帮助解决一个问题。我正在尝试发送当前登录会员的数据,并通过网站创建 www.wix.com 上的按钮重定向到不同的域。数据是状态、全名、电子邮件和 ID。使用的语言是javascript。 我想知道我做了什么才能在 url 中一起发送这些数据,以及我在代码中做错了什么。

import { currentMember } from 'wix-members';
import wixLocation from 'wix-location';

export function button2_click(event) {
  wixLocation.to("www.page.com" + currentMember.getMember().then((member) => {
      const id = member._id;
      const status = member.status
      const fullName = `${member.contactDetails.firstName} ${member.contactDetails.lastName}`;
      return member;
    })
    .catch((error) => {
      console.error(error);
    })
  );
}
  1. 正如 James 提到的,getMember return Promise 所以你应该等待 (await) 或 Promise 完成数据才能使用它。
  2. 您正在尝试用字符串 (url) 连接对象(用户详细信息)。在 Javascript 中是不可能的。您可以使用 JSON.stringify.
  3. 将对象“转换”为字符串
  4. 即使对象是字符串,您尝试重定向到的 URL 也是无效的,例如www.page.com{id:1111,status:'active'}。通过 url 传递数据的有效方法是通过查询参数,例如 www.page.com?userDetails={id:1111,status:'active'}.
    为了安全起见,将字符串化对象编码为 encodeURIComponent().
export async function button2_click(event) {
  const member = await currentMember.getMember();
  const id = member._id;
  const status = member.status
  const fullName = `${member.contactDetails.firstName} ${member.contactDetails.lastName}`;
  const userDetails = JSON.stringify({id, status, fullName});
  
  wixLocation.to(`www.page.com?user=${encodeURIComponent(userDetails)}`);
}

(您可以使用您现在使用的“then 方法”,但这是使用更现代的 API 的好机会,例如 async/await)

在 Wix Velo 论坛上进行了大量研究后,我发现 members-wix API,目前它有问题,导致在 users-wix API,但它已被弃用,它隐藏了网站上的功能,使访问信息变得困难。但是,在将迁移功能从 users-wix 复制到 members-wix 之后,连同 members-wix 身份验证,它完美地工作了,我还要感谢 Mosh Feu 的帮助 https://whosebug.com /users/863110/mosh-feu,这帮助我理解和改进了这段代码。

import { currentMember } from 'wix-members';
import wixLocation from 'wix-location';
import { authentication } from 'wix-members';
// NOTE: This example uses the new wix-members.currentMember.getMember()
// function, which replaces wix-users.currentUser.
// See the function description for more information, and
// line 36 for the deprecated example.

// ...

currentMember.getMember('FULL')
    .then((member) => {
        // Replaces currentUser.id
        const id = member._id;

        // Replaces currentUser.loggedIn
        const loggedIn = member ? true : false;

        // Replaces currentUser.getEmail()
        const loginEmail = member.loginEmail;
        const contactEmails = member.contactDetails.emails;
    })
    .catch((error) => {
        console.error(error);
    });

currentMember.getRoles()
    .then((roles) => {
        // Replaces currentUser.role and currentUser.getRoles()
        return roles;
    })
    .catch((error) => {
        console.error(error);
    });

// NOTE: This example uses the deprecated
// wix-users.currentUser object.

import wixUsers from 'wix-users';

// ...

let user = wixUsers.currentUser;

let userId = user.id; // "r5cme-6fem-485j-djre-4844c49"
let isLoggedIn = user.loggedIn; // true

user.getEmail()
    .then((email) => {
        let userEmail = email; // "user@something.com"
    });

user.getRoles()
    .then((roles) => {
        let firstRole = roles[0];
        let roleName = firstRole.name; // "Role Name"
        let roleDescription = firstRole.description; // "Role Description"
    });

user.getPricingPlans()
    .then((pricingPlans) => {
        let firstPlan = pricingPlans[0];
        let planName = firstPlan.name; // "Gold"
        let startDate = firstPlan.startDate; // Wed Aug 29 2018 09:39:41 GMT-0500 (Eastern Standard Time)
        let expirationDate = firstPlan.expiryDate; // Thu Nov 29 2018 08:39:41 GMT-0400 (Eastern Daylight Time)
    });
export async function button2_click(event) {
    authentication.onLogin(async(member) => {
        const loggedInMember = await member.getMember();
        const memberId = loggedInMember._id;
        console.log(`Member ${memberId} logged in:`, loggedInMember);
    });

    const member = await currentMember.getMember();
    const id = member._id;
    const status = member.status;
    const email = member.loginEmail
    const fullName = `${member.contactDetails.firstName} ${member.contactDetails.lastName}`;
    const userDetails = JSON.stringify({ id, status, fullName ,email });

    wixLocation.to(`https://www.url.com/?user=${encodeURIComponent(userDetails)}`);
}