UNPKG

@denz93/vendure-plugin-3rd-party-auth

Version:

A set of auth strategies to work with 3rd party such as Google, Facebook, etc

55 lines (54 loc) 2.23 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.FacebookAuthStrategy = void 0; const core_1 = require("@vendure/core"); const graphql_tag_1 = __importDefault(require("graphql-tag")); const constants_1 = require("./constants"); const cross_strategies_checker_service_1 = require("./cross-strategies-checker.service"); const facebook_auth_service_1 = require("./facebook-auth.service"); const interfaces_1 = require("./interfaces"); class FacebookAuthStrategy { constructor() { this.name = constants_1.FACEBOOK_STRATEGY_NAME; } defineInputType() { return (0, graphql_tag_1.default)(` input FacebookAuthInput { token: String! } `); } async authenticate(ctx, data) { try { const userInfo = await this.facebookAuthService.verify(data.token); let user = await this.externalAuthService.findCustomerUser(ctx, this.name, userInfo.email); if (user) return user; await this.crossStrategyChecker.check(ctx, userInfo.email, this.name); user = await this.externalAuthService.createCustomerAndUser(ctx, { strategy: this.name, emailAddress: userInfo.email, externalIdentifier: userInfo.email, verified: false, firstName: userInfo.first_name ?? '', lastName: userInfo.last_name ?? '' }); return user; } catch (err) { if (err instanceof interfaces_1.UserExistedInAnotherStrategyError) { return err.message; } return String(err); } } init(injector) { this.facebookAuthService = injector.get(facebook_auth_service_1.FacebookAuthService); this.externalAuthService = injector.get(core_1.ExternalAuthenticationService); this.crossStrategyChecker = injector.get(cross_strategies_checker_service_1.CrossStrategiesChecker); } } exports.FacebookAuthStrategy = FacebookAuthStrategy;