UNPKG

@vestige06/medusa-auth-wechat

Version:

Medusa 微信小程序第三方登录认证插件

138 lines 9.95 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.POST = POST; const utils_1 = require("@medusajs/framework/utils"); const wechat_auth_1 = __importDefault(require("../../../../providers/wechat-auth")); /** * 微信认证接口 * POST /store/auth/wechat */ async function POST(req, res) { try { const { code, userInfo } = req.body; if (!code) { return res.status(400).json({ success: false, message: "缺少微信登录凭证" }); } // 获取客户模块服务和认证模块服务 const customerModuleService = req.scope.resolve(utils_1.Modules.CUSTOMER); const authModuleService = req.scope.resolve(utils_1.Modules.AUTH); // 获取微信认证提供者配置(直接使用环境变量) const wechatOptions = { appId: process.env.WECHAT_MINIPROGRAM_APP_ID || "", appSecret: process.env.WECHAT_MINIPROGRAM_APP_SECRET || "" }; // 创建微信认证提供者实例 const wechatProvider = new wechat_auth_1.default(wechatOptions); // 执行微信认证 const authResult = await wechatProvider.authenticate({ url: req.url, headers: req.headers, body: { code, userInfo }, authScope: "customer" }); if (!authResult.success || !authResult.authIdentity) { return res.status(401).json({ success: false, message: authResult.error || "微信认证失败" }); } const { authIdentity } = authResult; const openid = authIdentity.entity_id; // 查找现有的认证身份 let existingAuth; try { const auths = await authModuleService.listAuthIdentities({ provider: "wechat", entity_id: openid }); existingAuth = auths.length > 0 ? auths[0] : null; } catch (error) { console.log("查找认证身份时出错:", error); } let customer; let authIdentityRecord; if (existingAuth) { // 已存在的用户,获取客户信息 try { customer = await customerModuleService.retrieveCustomer(existingAuth.customer_id); authIdentityRecord = existingAuth; } catch (error) { console.error("获取现有客户信息失败:", error); return res.status(500).json({ success: false, message: "获取用户信息失败" }); } } else { // 新用户,创建客户和认证身份 try { // 创建新客户 const customerData = { email: `wechat_${openid}@temp.com`, // 临时邮箱 first_name: userInfo?.nickName || "微信用户", metadata: { wechat_openid: openid, wechat_userinfo: userInfo } }; customer = await customerModuleService.createCustomers(customerData); // 创建认证身份 const authIdentities = await authModuleService.createAuthIdentities([{ provider: "wechat", entity_id: openid, actor_type: "customer", actor_id: customer.id, user_metadata: authIdentity.user_metadata, app_metadata: authIdentity.app_metadata }]); authIdentityRecord = authIdentities[0]; } catch (error) { console.error("创建新用户失败:", error); return res.status(500).json({ success: false, message: "创建用户失败" }); } } // 生成 JWT token let token; try { token = await authModuleService.generateJwtToken({ authIdentity: authIdentityRecord, actorType: "customer" }); } catch (error) { console.error("生成token失败:", error); return res.status(500).json({ success: false, message: "生成认证令牌失败" }); } // 返回成功结果 res.json({ success: true, customer, access_token: token, message: "微信登录成功" }); } catch (error) { console.error("微信认证接口错误:", error); res.status(500).json({ success: false, message: "服务器内部错误" }); } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL3N0b3JlL2F1dGgvd2VjaGF0L3JvdXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBU0Esb0JBd0lDO0FBaEpELHFEQUFtRDtBQUVuRCxvRkFBa0U7QUFFbEU7OztHQUdHO0FBQ0ksS0FBSyxVQUFVLElBQUksQ0FDeEIsR0FBa0IsRUFDbEIsR0FBbUI7SUFFbkIsSUFBSSxDQUFDO1FBQ0gsTUFBTSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFBO1FBRW5DLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNWLE9BQU8sR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7Z0JBQzFCLE9BQU8sRUFBRSxLQUFLO2dCQUNkLE9BQU8sRUFBRSxVQUFVO2FBQ3BCLENBQUMsQ0FBQTtRQUNKLENBQUM7UUFFRCxrQkFBa0I7UUFDbEIsTUFBTSxxQkFBcUIsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxlQUFPLENBQUMsUUFBUSxDQUFDLENBQUE7UUFDakUsTUFBTSxpQkFBaUIsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxlQUFPLENBQUMsSUFBSSxDQUFDLENBQUE7UUFFekQsd0JBQXdCO1FBQ3hCLE1BQU0sYUFBYSxHQUFHO1lBQ3BCLEtBQUssRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLHlCQUF5QixJQUFJLEVBQUU7WUFDbEQsU0FBUyxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsNkJBQTZCLElBQUksRUFBRTtTQUMzRCxDQUFBO1FBRUQsY0FBYztRQUNkLE1BQU0sY0FBYyxHQUFHLElBQUkscUJBQWtCLENBQUMsYUFBYSxDQUFDLENBQUE7UUFFNUQsU0FBUztRQUNULE1BQU0sVUFBVSxHQUFHLE1BQU0sY0FBYyxDQUFDLFlB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