slr-angularx-social-login
Version:
Social login and authentication module for Angular 13. Supports authentication with Google, Facebook, Amazon, and VK. Can be extended to other providers also.
75 lines • 9.8 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmstbG9naW4tcHJvdmlkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9saWIvc3JjL3Byb3ZpZGVycy92ay1sb2dpbi1wcm92aWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNwRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFJckQsTUFBTSxPQUFPLGVBQWdCLFNBQVEsaUJBQWlCO0lBQ3BELFlBQ1UsUUFBZ0IsRUFDaEIsY0FBbUI7UUFDekIsTUFBTSxFQUFFLG9CQUFvQjtRQUM1QixPQUFPLEVBQUUsT0FBTztLQUNqQjtRQUVELEtBQUssRUFBRSxDQUFDO1FBTkEsYUFBUSxHQUFSLFFBQVEsQ0FBUTtRQUNoQixnQkFBVyxHQUFYLFdBQVcsQ0FHbEI7UUFPYyxlQUFVLEdBQUcsNEJBQTRCLENBQUM7UUFDMUMsb0JBQWUsR0FBRyxXQUFXLENBQUM7SUFML0MsQ0FBQztJQU9ELFVBQVU7UUFDUixPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1lBQ3JDLElBQUk7Z0JBQ0YsSUFBSSxDQUFDLFVBQVUsQ0FDYixlQUFlLENBQUMsV0FBVyxFQUMzQixJQUFJLENBQUMsVUFBVSxFQUNmLEdBQUcsRUFBRTtvQkFDSCxFQUFFLENBQUMsSUFBSSxDQUFDO3dCQUNOLEtBQUssRUFBRSxJQUFJLENBQUMsUUFBUTtxQkFDckIsQ0FBQyxDQUFDO29CQUVILE9BQU8sRUFBRSxDQUFDO2dCQUNaLENBQUMsQ0FDRixDQUFDO2FBQ0g7WUFBQyxPQUFPLEdBQUcsRUFBRTtnQkFDWixNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7YUFDYjtRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELGNBQWM7UUFDWixPQUFPLElBQUksT0FBTyxDQUFhLENBQUMsT0FBWSxFQUFFLE1BQVcsRUFBRSxFQUFFLENBQzNELElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQzdDLENBQUM7SUFDSixDQUFDO0lBRUQsTUFBTTtRQUNKLE9BQU8sSUFBSSxPQUFPLENBQWEsQ0FBQyxPQUFZLEVBQUUsTUFBVyxFQUFFLEVBQUUsQ0FDM0QsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQ3JDLENBQUM7SUFDSixDQUFDO0lBRUQsT0FBTztRQUNMLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7WUFDckMsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxRQUFhLEVBQUUsRUFBRTtnQkFDL0IsT0FBTyxFQUFFLENBQUM7WUFDWixDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLGNBQWMsQ0FBQyxPQUFZLEVBQUUsTUFBVztRQUM5QyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLGFBQWtCLEVBQUUsRUFBRTtZQUNuQyxJQUFJLGFBQWEsQ0FBQyxNQUFNLEtBQUssV0FBVyxFQUFFO2dCQUN4QyxJQUFJLENBQUMsT0FBTyxDQUNWLGFBQWEsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUN6QixhQUFhLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFDekIsT0FBTyxDQUNSLENBQUM7YUFDSDtRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLE9BQU8sQ0FBQyxNQUFXLEVBQUUsS0FBVSxFQUFFLE9BQVk7UUFDbkQsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQ1QsSUFBSSxDQUFDLGVBQWUsRUFDcEI7WUFDRSxPQUFPLEVBQUUsTUFBTTtZQUNmLE1BQU0sRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU07WUFDL0IsQ0FBQyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTztTQUM1QixFQUNELENBQUMsWUFBaUIsRUFBRSxFQUFFO1lBQ3BCLE9BQU8sQ0FDTCxJQUFJLENBQUMsVUFBVSxDQUNiLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUUsWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUN2RCxDQUNGLENBQUM7UUFDSixDQUFDLENBQ0YsQ0FBQztJQUNKLENBQUM7SUFFTyxzQkFBc0IsQ0FBQyxPQUFZLEVBQUUsTUFBVztRQUN0RCxFQUFFLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLGFBQWtCLEVBQUUsRUFBRTtZQUM1QyxJQUFJLGFBQWEsQ0FBQyxNQUFNLEtBQUssV0FBVyxFQUFFO2dCQUN4QyxJQUFJLENBQUMsT0FBTyxDQUNWLGFBQWEsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUN6QixhQUFhLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFDekIsT0FBTyxDQUNSLENBQUM7YUFDSDtRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLFVBQVUsQ0FBQyxRQUFhO1FBQzlCLE1BQU0sSUFBSSxHQUFlLElBQUksVUFBVSxFQUFFLENBQUM7UUFDMUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxRQUFRLENBQUMsRUFBRSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxJQUFJLEdBQUcsR0FBRyxRQUFRLENBQUMsVUFBVSxJQUFJLFFBQVEsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUMzRCxJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQyxTQUFTLENBQUM7UUFDbkMsSUFBSSxDQUFDLFNBQVMsR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDO1FBQ2hDLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQzs7QUE5RnNCLDJCQUFXLEdBQVcsSUFBSSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQmFzZUxvZ2luUHJvdmlkZXIgfSBmcm9tICcuLi9lbnRpdGllcy9iYXNlLWxvZ2luLXByb3ZpZGVyJztcbmltcG9ydCB7IFNvY2lhbFVzZXIgfSBmcm9tICcuLi9lbnRpdGllcy9zb2NpYWwtdXNlcic7XG5cbmRlY2xhcmUgbGV0IFZLOiBhbnk7XG5cbmV4cG9ydCBjbGFzcyBWS0xvZ2luUHJvdmlkZXIgZXh0ZW5kcyBCYXNlTG9naW5Qcm92aWRlciB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgY2xpZW50SWQ6IHN0cmluZyxcbiAgICBwcml2YXRlIGluaXRPcHRpb25zOiBhbnkgPSB7XG4gICAgICBmaWVsZHM6ICdwaG90b19tYXgsY29udGFjdHMnLFxuICAgICAgdmVyc2lvbjogJzUuMTI0JyxcbiAgICB9XG4gICkge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFBST1ZJREVSX0lEOiBzdHJpbmcgPSAnVksnO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgVktfQVBJX1VSTCA9ICcvL3ZrLmNvbS9qcy9hcGkvb3BlbmFwaS5qcyc7XG4gIHByaXZhdGUgcmVhZG9ubHkgVktfQVBJX0dFVF9VU0VSID0gJ3VzZXJzLmdldCc7XG5cbiAgaW5pdGlhbGl6ZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdGhpcy5sb2FkU2NyaXB0KFxuICAgICAgICAgIFZLTG9naW5Qcm92aWRlci5QUk9WSURFUl9JRCxcbiAgICAgICAgICB0aGlzLlZLX0FQSV9VUkwsXG4gICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgVksuaW5pdCh7XG4gICAgICAgICAgICAgIGFwaUlkOiB0aGlzLmNsaWVudElkLFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBnZXRMb2dpblN0YXR1cygpOiBQcm9taXNlPFNvY2lhbFVzZXI+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8U29jaWFsVXNlcj4oKHJlc29sdmU6IGFueSwgcmVqZWN0OiBhbnkpID0+XG4gICAgICB0aGlzLmdldExvZ2luU3RhdHVzSW50ZXJuYWwocmVzb2x2ZSwgcmVqZWN0KVxuICAgICk7XG4gIH1cblxuICBzaWduSW4oKTogUHJvbWlzZTxTb2NpYWxVc2VyPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPFNvY2lhbFVzZXI+KChyZXNvbHZlOiBhbnksIHJlamVjdDogYW55KSA9PlxuICAgICAgdGhpcy5zaWduSW5JbnRlcm5hbChyZXNvbHZlLCByZWplY3QpXG4gICAgKTtcbiAgfVxuXG4gIHNpZ25PdXQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIFZLLkF1dGgubG9nb3V0KChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgIHJlc29sdmUoKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBzaWduSW5JbnRlcm5hbChyZXNvbHZlOiBhbnksIHJlamVjdDogYW55KSB7XG4gICAgVksuQXV0aC5sb2dpbigobG9naW5SZXNwb25zZTogYW55KSA9PiB7XG4gICAgICBpZiAobG9naW5SZXNwb25zZS5zdGF0dXMgPT09ICdjb25uZWN0ZWQnKSB7XG4gICAgICAgIHRoaXMuZ2V0VXNlcihcbiAgICAgICAgICBsb2dpblJlc3BvbnNlLnNlc3Npb24ubWlkLFxuICAgICAgICAgIGxvZ2luUmVzcG9uc2Uuc2Vzc2lvbi5zaWQsXG4gICAgICAgICAgcmVzb2x2ZVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRVc2VyKHVzZXJJZDogYW55LCB0b2tlbjogYW55LCByZXNvbHZlOiBhbnkpIHtcbiAgICBWSy5BcGkuY2FsbChcbiAgICAgIHRoaXMuVktfQVBJX0dFVF9VU0VSLFxuICAgICAge1xuICAgICAgICB1c2VyX2lkOiB1c2VySWQsXG4gICAgICAgIGZpZWxkczogdGhpcy5pbml0T3B0aW9ucy5maWVsZHMsXG4gICAgICAgIHY6IHRoaXMuaW5pdE9wdGlvbnMudmVyc2lvbixcbiAgICAgIH0sXG4gICAgICAodXNlclJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgcmVzb2x2ZShcbiAgICAgICAgICB0aGlzLmNyZWF0ZVVzZXIoXG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKHt9LCB7IHRva2VuIH0sIHVzZXJSZXNwb25zZS5yZXNwb25zZVswXSlcbiAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0TG9naW5TdGF0dXNJbnRlcm5hbChyZXNvbHZlOiBhbnksIHJlamVjdDogYW55KSB7XG4gICAgVksuQXV0aC5nZXRMb2dpblN0YXR1cygobG9naW5SZXNwb25zZTogYW55KSA9PiB7XG4gICAgICBpZiAobG9naW5SZXNwb25zZS5zdGF0dXMgPT09ICdjb25uZWN0ZWQnKSB7XG4gICAgICAgIHRoaXMuZ2V0VXNlcihcbiAgICAgICAgICBsb2dpblJlc3BvbnNlLnNlc3Npb24ubWlkLFxuICAgICAgICAgIGxvZ2luUmVzcG9uc2Uuc2Vzc2lvbi5zaWQsXG4gICAgICAgICAgcmVzb2x2ZVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVVc2VyKHJlc3BvbnNlOiBhbnkpOiBTb2NpYWxVc2VyIHtcbiAgICBjb25zdCB1c2VyOiBTb2NpYWxVc2VyID0gbmV3IFNvY2lhbFVzZXIoKTtcbiAgICB1c2VyLmlkID0gcmVzcG9uc2UuaWQ7XG4gICAgdXNlci5uYW1lID0gYCR7cmVzcG9uc2UuZmlyc3RfbmFtZX0gJHtyZXNwb25zZS5sYXN0X25hbWV9YDtcbiAgICB1c2VyLnBob3RvVXJsID0gcmVzcG9uc2UucGhvdG9fbWF4O1xuICAgIHVzZXIuYXV0aFRva2VuID0gcmVzcG9uc2UudG9rZW47XG4gICAgcmV0dXJuIHVzZXI7XG4gIH1cbn1cbiJdfQ==