@vestige06/medusa-auth-wechat
Version:
Medusa 微信小程序第三方登录认证插件
94 lines • 5.86 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.WechatAuthProvider = void 0;
const utils_1 = require("@medusajs/framework/utils");
/**
* 微信认证提供者服务
*/
class WechatAuthProvider {
constructor(options) {
this.options_ = options;
}
/**
* 认证方法
* @param data 认证输入数据
* @returns 认证响应
*/
async authenticate(data) {
try {
const authData = data.body;
if (!authData.code) {
return {
success: false,
error: "缺少微信登录凭证"
};
}
// 使用 code 换取 session_key 和 openid
const sessionData = await this.getWechatSession(authData.code);
if (!sessionData.openid) {
return {
success: false,
error: sessionData.errmsg || "获取微信用户信息失败"
};
}
// 构建认证身份
const authIdentity = {
entity_id: sessionData.openid,
user_metadata: {
openid: sessionData.openid,
unionid: sessionData.unionid,
session_key: sessionData.session_key,
userInfo: authData.userInfo,
},
app_metadata: {
provider: "wechat",
created_at: new Date().toISOString(),
}
};
return {
success: true,
authIdentity
};
}
catch (error) {
console.error("微信认证失败:", error);
return {
success: false,
error: "认证过程中发生错误"
};
}
}
/**
* 获取微信 session 信息
* @param code 微信登录凭证
* @returns 微信 session 响应
*/
async getWechatSession(code) {
const url = new URL("https://api.weixin.qq.com/sns/jscode2session");
url.searchParams.set("appid", this.options_.appId);
url.searchParams.set("secret", this.options_.appSecret);
url.searchParams.set("js_code", code);
url.searchParams.set("grant_type", "authorization_code");
const response = await fetch(url.toString());
if (!response.ok) {
throw new utils_1.MedusaError(utils_1.MedusaError.Types.UNEXPECTED_STATE, `微信 API 请求失败: ${response.status}`);
}
return response.json();
}
/**
* 验证认证状态
* @param data 验证数据
* @returns 验证结果
*/
async validateCallback(data) {
// 微信小程序通常不需要回调验证,直接返回成功
const response = {
success: true,
authIdentity: undefined
};
return response;
}
}
exports.WechatAuthProvider = WechatAuthProvider;
exports.default = WechatAuthProvider;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2VjaGF0LWF1dGguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvcHJvdmlkZXJzL3dlY2hhdC1hdXRoLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUNBLHFEQUF1RDtBQTZCdkQ7O0dBRUc7QUFDSCxNQUFhLGtCQUFrQjtJQUc3QixZQUFZLE9BQTBCO1FBQ3BDLElBQUksQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFBO0lBQ3pCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsS0FBSyxDQUFDLFlBQVksQ0FBQyxJQUF5QjtRQUMxQyxJQUFJLENBQUM7WUFDSCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBdUIsQ0FBQTtZQUU3QyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUNuQixPQUFPO29CQUNMLE9BQU8sRUFBRSxLQUFLO29CQUNkLEtBQUssRUFBRSxVQUFVO2lCQUNsQixDQUFBO1lBQ0gsQ0FBQztZQUVELGtDQUFrQztZQUNsQyxNQUFNLFdBQVcsR0FBRyxNQUFNLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUE7WUFFOUQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDeEIsT0FBTztvQkFDTCxPQUFPLEVBQUUsS0FBSztvQkFDZCxLQUFLLEVBQUUsV0FBVyxDQUFDLE1BQU0sSUFBSSxZQUFZO2lCQUMxQyxDQUFBO1lBQ0gsQ0FBQztZQUVELFNBQVM7WUFDVCxNQUFNLFlBQVksR0FBRztnQkFDbkIsU0FBUyxFQUFFLFdBQVcsQ0FBQyxNQUFNO2dCQUM3QixhQUFhLEVBQUU7b0JBQ2IsTUFBTSxFQUFFLFdBQVcsQ0FBQyxNQUFNO29CQUMxQixPQUFPLEVBQUUsV0FBVyxDQUFDLE9BQU87b0JBQzVCLFdBQVcsRUFBRSxXQUFXLENBQUMsV0FBVztvQkFDcEMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxRQUFRO2lCQUM1QjtnQkFDRCxZQUFZLEVBQUU7b0JBQ1osUUFBUSxFQUFFLFFBQVE7b0JBQ2xCLFVBQVUsRUFBRSxJQUFJLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRTtpQkFDckM7YUFDRixDQUFBO1lBRUQsT0FBTztnQkFDTCxPQUFPLEVBQUUsSUFBSTtnQkFDYixZQUFZO2FBQ2IsQ0FBQTtRQUNILENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsT0FBTyxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUE7WUFDL0IsT0FBTztnQkFDTCxPQUFPLEVBQUUsS0FBSztnQkFDZCxLQUFLLEVBQUUsV0FBVzthQUNuQixDQUFBO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFRDs7OztPQUlHO0lBQ0ssS0FBSyxDQUFDLGdCQUFnQixDQUFDLElBQVk7UUFDekMsTUFBTSxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUMsOENBQThDLENBQUMsQ0FBQTtRQUNuRSxHQUFHLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQTtRQUNsRCxHQUFHLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQTtRQUN2RCxHQUFHLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUE7UUFDckMsR0FBRyxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLG9CQUFvQixDQUFDLENBQUE7UUFFeEQsTUFBTSxRQUFRLEdBQUcsTUFBTSxLQUFLLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUE7UUFFNUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUNqQixNQUFNLElBQUksbUJBQVcsQ0FDbkIsbUJBQVcsQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLEVBQ2xDLGdCQUFnQixRQUFRLENBQUMsTUFBTSxFQUFFLENBQ2xDLENBQUE7UUFDSCxDQUFDO1FBRUQsT0FBTyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUE7SUFDeEIsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxLQUFLLENBQUMsZ0JBQWdCLENBQUMsSUFBeUI7UUFDOUMsd0JBQXdCO1FBQ3hCLE1BQU0sUUFBUSxHQUEyQjtZQUN2QyxPQUFPLEVBQUUsSUFBSTtZQUNiLFlBQVksRUFBRSxTQUFTO1NBQ3hCLENBQUE7UUFDRCxPQUFPLFFBQVEsQ0FBQTtJQUNqQixDQUFDO0NBQ0Y7QUFsR0QsZ0RBa0dDO0FBRUQsa0JBQWUsa0JBQWtCLENBQUEifQ==