@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
JavaScript
;
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;