@vestige06/medusa-auth-wechat
Version:
Medusa 微信小程序第三方登录认证插件
138 lines • 9.95 kB
JavaScript
"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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