angularx-social-login
Version:
Social login and authentication module for Angular 9+. Supports authentication with Google, Facebook, Amazon, and VK. Can be extended to other providers also.
75 lines • 10.2 kB
JavaScript
import { BaseLoginProvider } from '../entities/base-login-provider';
import { SocialUser } from '../entities/social-user';
export class VKLoginProvider extends BaseLoginProvider {
constructor(clientId, initOptions = {
fields: 'photo_max,contacts',
version: '5.124',
}) {
super();
this.clientId = clientId;
this.initOptions = initOptions;
this.VK_API_URL = '//vk.com/js/api/openapi.js';
this.VK_API_GET_USER = 'users.get';
}
initialize() {
return new Promise((resolve, reject) => {
try {
this.loadScript(VKLoginProvider.PROVIDER_ID, this.VK_API_URL, () => {
VK.init({
apiId: this.clientId,
});
resolve();
});
}
catch (err) {
reject(err);
}
});
}
getLoginStatus() {
return new Promise((resolve, reject) => this.getLoginStatusInternal(resolve, reject));
}
signIn() {
return new Promise((resolve, reject) => this.signInInternal(resolve, reject));
}
signOut() {
return new Promise((resolve, reject) => {
VK.Auth.logout((response) => {
resolve();
});
});
}
signInInternal(resolve, reject) {
VK.Auth.login((loginResponse) => {
if (loginResponse.status === 'connected') {
this.getUser(loginResponse.session.mid, loginResponse.session.sid, resolve);
}
});
}
getUser(userId, token, resolve) {
VK.Api.call(this.VK_API_GET_USER, {
user_id: userId,
fields: this.initOptions.fields,
v: this.initOptions.version,
}, (userResponse) => {
resolve(this.createUser(Object.assign({}, { token }, userResponse.response[0])));
});
}
getLoginStatusInternal(resolve, reject) {
VK.Auth.getLoginStatus((loginResponse) => {
if (loginResponse.status === 'connected') {
this.getUser(loginResponse.session.mid, loginResponse.session.sid, resolve);
}
});
}
createUser(response) {
const user = new SocialUser();
user.id = response.id;
user.name = `${response.first_name} ${response.last_name}`;
user.photoUrl = response.photo_max;
user.authToken = response.token;
return user;
}
}
VKLoginProvider.PROVIDER_ID = 'VK';
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmstbG9naW4tcHJvdmlkZXIuanMiLCJzb3VyY2VSb290IjoiQzovVXNlcnMvSkFEVVRUQS9kZXYvd2ViL2FuZ3VsYXJ4LXNvY2lhbC1sb2dpbi9wcm9qZWN0cy9saWIvc3JjLyIsInNvdXJjZXMiOlsicHJvdmlkZXJzL3ZrLWxvZ2luLXByb3ZpZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUlyRCxNQUFNLE9BQU8sZUFBZ0IsU0FBUSxpQkFBaUI7SUFDcEQsWUFDVSxRQUFnQixFQUNoQixjQUFtQjtRQUN6QixNQUFNLEVBQUUsb0JBQW9CO1FBQzVCLE9BQU8sRUFBRSxPQUFPO0tBQ2pCO1FBRUQsS0FBSyxFQUFFLENBQUM7UUFOQSxhQUFRLEdBQVIsUUFBUSxDQUFRO1FBQ2hCLGdCQUFXLEdBQVgsV0FBVyxDQUdsQjtRQU9jLGVBQVUsR0FBRyw0QkFBNEIsQ0FBQztRQUMxQyxvQkFBZSxHQUFHLFdBQVcsQ0FBQztJQUwvQyxDQUFDO0lBT0QsVUFBVTtRQUNSLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7WUFDckMsSUFBSTtnQkFDRixJQUFJLENBQUMsVUFBVSxDQUNiLGVBQWUsQ0FBQyxXQUFXLEVBQzNCLElBQUksQ0FBQyxVQUFVLEVBQ2YsR0FBRyxFQUFFO29CQUNILEVBQUUsQ0FBQyxJQUFJLENBQUM7d0JBQ04sS0FBSyxFQUFFLElBQUksQ0FBQyxRQUFRO3FCQUNyQixDQUFDLENBQUM7b0JBRUgsT0FBTyxFQUFFLENBQUM7Z0JBQ1osQ0FBQyxDQUNGLENBQUM7YUFDSDtZQUFDLE9BQU8sR0FBRyxFQUFFO2dCQUNaLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQzthQUNiO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsY0FBYztRQUNaLE9BQU8sSUFBSSxPQUFPLENBQWEsQ0FBQyxPQUFZLEVBQUUsTUFBVyxFQUFFLEVBQUUsQ0FDM0QsSUFBSSxDQUFDLHNCQUFzQixDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FDN0MsQ0FBQztJQUNKLENBQUM7SUFFRCxNQUFNO1FBQ0osT0FBTyxJQUFJLE9BQU8sQ0FBYSxDQUFDLE9BQVksRUFBRSxNQUFXLEVBQUUsRUFBRSxDQUMzRCxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FDckMsQ0FBQztJQUNKLENBQUM7SUFFRCxPQUFPO1FBQ0wsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtZQUNyQyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFFBQWEsRUFBRSxFQUFFO2dCQUMvQixPQUFPLEVBQUUsQ0FBQztZQUNaLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU8sY0FBYyxDQUFDLE9BQVksRUFBRSxNQUFXO1FBQzlDLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsYUFBa0IsRUFBRSxFQUFFO1lBQ25DLElBQUksYUFBYSxDQUFDLE1BQU0sS0FBSyxXQUFXLEVBQUU7Z0JBQ3hDLElBQUksQ0FBQyxPQUFPLENBQ1YsYUFBYSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQ3pCLGFBQWEsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUN6QixPQUFPLENBQ1IsQ0FBQzthQUNIO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU8sT0FBTyxDQUFDLE1BQVcsRUFBRSxLQUFVLEVBQUUsT0FBWTtRQUNuRCxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksQ0FDVCxJQUFJLENBQUMsZUFBZSxFQUNwQjtZQUNFLE9BQU8sRUFBRSxNQUFNO1lBQ2YsTUFBTSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTTtZQUMvQixDQUFDLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPO1NBQzVCLEVBQ0QsQ0FBQyxZQUFpQixFQUFFLEVBQUU7WUFDcEIsT0FBTyxDQUNMLElBQUksQ0FBQyxVQUFVLENBQ2IsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRSxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQ3ZELENBQ0YsQ0FBQztRQUNKLENBQUMsQ0FDRixDQUFDO0lBQ0osQ0FBQztJQUVPLHNCQUFzQixDQUFDLE9BQVksRUFBRSxNQUFXO1FBQ3RELEVBQUUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsYUFBa0IsRUFBRSxFQUFFO1lBQzVDLElBQUksYUFBYSxDQUFDLE1BQU0sS0FBSyxXQUFXLEVBQUU7Z0JBQ3hDLElBQUksQ0FBQyxPQUFPLENBQ1YsYUFBYSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQ3pCLGFBQWEsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUN6QixPQUFPLENBQ1IsQ0FBQzthQUNIO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU8sVUFBVSxDQUFDLFFBQWE7UUFDOUIsTUFBTSxJQUFJLEdBQWUsSUFBSSxVQUFVLEVBQUUsQ0FBQztRQUMxQyxJQUFJLENBQUMsRUFBRSxHQUFHLFFBQVEsQ0FBQyxFQUFFLENBQUM7UUFDdEIsSUFBSSxDQUFDLElBQUksR0FBRyxHQUFHLFFBQVEsQ0FBQyxVQUFVLElBQUksUUFBUSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQzNELElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDLFNBQVMsQ0FBQztRQUNuQyxJQUFJLENBQUMsU0FBUyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUM7UUFDaEMsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDOztBQTlGc0IsMkJBQVcsR0FBVyxJQUFJLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCYXNlTG9naW5Qcm92aWRlciB9IGZyb20gJy4uL2VudGl0aWVzL2Jhc2UtbG9naW4tcHJvdmlkZXInO1xyXG5pbXBvcnQgeyBTb2NpYWxVc2VyIH0gZnJvbSAnLi4vZW50aXRpZXMvc29jaWFsLXVzZXInO1xyXG5cclxuZGVjbGFyZSBsZXQgVks6IGFueTtcclxuXHJcbmV4cG9ydCBjbGFzcyBWS0xvZ2luUHJvdmlkZXIgZXh0ZW5kcyBCYXNlTG9naW5Qcm92aWRlciB7XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGNsaWVudElkOiBzdHJpbmcsXHJcbiAgICBwcml2YXRlIGluaXRPcHRpb25zOiBhbnkgPSB7XHJcbiAgICAgIGZpZWxkczogJ3Bob3RvX21heCxjb250YWN0cycsXHJcbiAgICAgIHZlcnNpb246ICc1LjEyNCcsXHJcbiAgICB9XHJcbiAgKSB7XHJcbiAgICBzdXBlcigpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBQUk9WSURFUl9JRDogc3RyaW5nID0gJ1ZLJztcclxuXHJcbiAgcHJpdmF0ZSByZWFkb25seSBWS19BUElfVVJMID0gJy8vdmsuY29tL2pzL2FwaS9vcGVuYXBpLmpzJztcclxuICBwcml2YXRlIHJlYWRvbmx5IFZLX0FQSV9HRVRfVVNFUiA9ICd1c2Vycy5nZXQnO1xyXG5cclxuICBpbml0aWFsaXplKCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICB0aGlzLmxvYWRTY3JpcHQoXHJcbiAgICAgICAgICBWS0xvZ2luUHJvdmlkZXIuUFJPVklERVJfSUQsXHJcbiAgICAgICAgICB0aGlzLlZLX0FQSV9VUkwsXHJcbiAgICAgICAgICAoKSA9PiB7XHJcbiAgICAgICAgICAgIFZLLmluaXQoe1xyXG4gICAgICAgICAgICAgIGFwaUlkOiB0aGlzLmNsaWVudElkLFxyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIHJlc29sdmUoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICApO1xyXG4gICAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgICByZWplY3QoZXJyKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBnZXRMb2dpblN0YXR1cygpOiBQcm9taXNlPFNvY2lhbFVzZXI+IHtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZTxTb2NpYWxVc2VyPigocmVzb2x2ZTogYW55LCByZWplY3Q6IGFueSkgPT5cclxuICAgICAgdGhpcy5nZXRMb2dpblN0YXR1c0ludGVybmFsKHJlc29sdmUsIHJlamVjdClcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBzaWduSW4oKTogUHJvbWlzZTxTb2NpYWxVc2VyPiB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2U8U29jaWFsVXNlcj4oKHJlc29sdmU6IGFueSwgcmVqZWN0OiBhbnkpID0+XHJcbiAgICAgIHRoaXMuc2lnbkluSW50ZXJuYWwocmVzb2x2ZSwgcmVqZWN0KVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHNpZ25PdXQoKTogUHJvbWlzZTxhbnk+IHtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgIFZLLkF1dGgubG9nb3V0KChyZXNwb25zZTogYW55KSA9PiB7XHJcbiAgICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzaWduSW5JbnRlcm5hbChyZXNvbHZlOiBhbnksIHJlamVjdDogYW55KSB7XHJcbiAgICBWSy5BdXRoLmxvZ2luKChsb2dpblJlc3BvbnNlOiBhbnkpID0+IHtcclxuICAgICAgaWYgKGxvZ2luUmVzcG9uc2Uuc3RhdHVzID09PSAnY29ubmVjdGVkJykge1xyXG4gICAgICAgIHRoaXMuZ2V0VXNlcihcclxuICAgICAgICAgIGxvZ2luUmVzcG9uc2Uuc2Vzc2lvbi5taWQsXHJcbiAgICAgICAgICBsb2dpblJlc3BvbnNlLnNlc3Npb24uc2lkLFxyXG4gICAgICAgICAgcmVzb2x2ZVxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRVc2VyKHVzZXJJZDogYW55LCB0b2tlbjogYW55LCByZXNvbHZlOiBhbnkpIHtcclxuICAgIFZLLkFwaS5jYWxsKFxyXG4gICAgICB0aGlzLlZLX0FQSV9HRVRfVVNFUixcclxuICAgICAge1xyXG4gICAgICAgIHVzZXJfaWQ6IHVzZXJJZCxcclxuICAgICAgICBmaWVsZHM6IHRoaXMuaW5pdE9wdGlvbnMuZmllbGRzLFxyXG4gICAgICAgIHY6IHRoaXMuaW5pdE9wdGlvbnMudmVyc2lvbixcclxuICAgICAgfSxcclxuICAgICAgKHVzZXJSZXNwb25zZTogYW55KSA9PiB7XHJcbiAgICAgICAgcmVzb2x2ZShcclxuICAgICAgICAgIHRoaXMuY3JlYXRlVXNlcihcclxuICAgICAgICAgICAgT2JqZWN0LmFzc2lnbih7fSwgeyB0b2tlbiB9LCB1c2VyUmVzcG9uc2UucmVzcG9uc2VbMF0pXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0TG9naW5TdGF0dXNJbnRlcm5hbChyZXNvbHZlOiBhbnksIHJlamVjdDogYW55KSB7XHJcbiAgICBWSy5BdXRoLmdldExvZ2luU3RhdHVzKChsb2dpblJlc3BvbnNlOiBhbnkpID0+IHtcclxuICAgICAgaWYgKGxvZ2luUmVzcG9uc2Uuc3RhdHVzID09PSAnY29ubmVjdGVkJykge1xyXG4gICAgICAgIHRoaXMuZ2V0VXNlcihcclxuICAgICAgICAgIGxvZ2luUmVzcG9uc2Uuc2Vzc2lvbi5taWQsXHJcbiAgICAgICAgICBsb2dpblJlc3BvbnNlLnNlc3Npb24uc2lkLFxyXG4gICAgICAgICAgcmVzb2x2ZVxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjcmVhdGVVc2VyKHJlc3BvbnNlOiBhbnkpOiBTb2NpYWxVc2VyIHtcclxuICAgIGNvbnN0IHVzZXI6IFNvY2lhbFVzZXIgPSBuZXcgU29jaWFsVXNlcigpO1xyXG4gICAgdXNlci5pZCA9IHJlc3BvbnNlLmlkO1xyXG4gICAgdXNlci5uYW1lID0gYCR7cmVzcG9uc2UuZmlyc3RfbmFtZX0gJHtyZXNwb25zZS5sYXN0X25hbWV9YDtcclxuICAgIHVzZXIucGhvdG9VcmwgPSByZXNwb25zZS5waG90b19tYXg7XHJcbiAgICB1c2VyLmF1dGhUb2tlbiA9IHJlc3BvbnNlLnRva2VuO1xyXG4gICAgcmV0dXJuIHVzZXI7XHJcbiAgfVxyXG59XHJcbiJdfQ==