Позвольте мне перефразировать…

В Angular 2 (4) с angular universal, убивающим javascript sdk, делать OAuth для LinkedIn все равно, что вырывать зубы.

Поэтому, когда вы начинаете работать с LinkedIn JS SDK, жизнь кажется (осмелюсь сказать) оптимистичной. По вашему офису (в шкафу) порхают бабочки, и все кажется фантастическим. Даже в Angular 2 (до универсального) SDK упрощает использование OAuth.

<script type="text/javascript" src="//platform.linkedin.com/in.js">
    api_key:   [API_KEY]
    onLoad:    [ONLOAD]
    authorize: [AUTHORIZE]
    lang:      [LANG_LOCALE]
</script>

Кажется достаточно простым, немного js здесь, немного js там и ва-лах волшебство. Ваша аутентификация работает, вы получаете приятный небольшой временный код, который вы можете обменять на токен доступа ваших клиентов и начать запрашивать, сколько душе угодно.

Но подождите, теперь у нас есть всемогущая команда Angular 2 (4), выгоняющая Angular Universal, и вы хотите воспользоваться этим. Но как?

Стоп, это ловушка! (На самом деле не останавливайтесь, иначе ваш сайт будет отстойным, примите кодовый ад)

Angular-Universal — отличный пакет, не поймите меня неправильно, он позволяет вам предварительно отображать ваши шаблоны на стороне логического сервера, чтобы улучшить производительность и SEO. Мы все знаем (ну, я знаю), что SEO было одним из самых больших проклятий существования SPA. По сути, это говорит: «Иди на хуй, нет, лайки», и поздравляю, Google смотрит на вас свысока, как на симпатичную девушку (или парня) в старшей школе. Angular-Universal решает эту проблему, но взамен создает крошечную проблему. Больше нет доступа к объекту окна.

Вы думаете, что команда Angular могла бы потенциально возможно решить эту проблему для клиентов, поскольку она нарушает 25–30% всех пакетов Angular 2 (4)? Нет, им плевать, и вам тоже.

Я знаю, вы, должно быть, думаете: «Но Даниэль, есть еще способ получить доступ к объекту окна». Что является правдой. Но это отстой. Попробуй, увидишь.

Тогда вернись к этой статье и учись на моих ошибках, умник.

Так как же обойти эту проблему для чего-то вроде LinkedIn OAuth?

Конечно, с REST API!

Позволь мне показать тебе….

Во-первых, к черту javascript SDK LinkedIn, теперь он для вас ничего не значит. Это бесполезно. Сожгите его огнем.

Вот ваш пример компонента, который работает, черт возьми, и это то, что имеет значение в реальном мире.

И вы чертовски правы, я действительно использую типы в своем Angular 2 (4), и это потому, что я не из тех ленивых :any придурков.

Я настоящий краснокровный муриканец, который пытается заставить (Кен гребаный Уиллер) гордиться. Даже если он ненавидит машинописный текст (из уст в уста).

Убедитесь, что вы зарегистрировали свой redirect_uri в своем приложении linkedin, убедитесь, что ваш идентификатор клиента точен, и это будет работать;)

Примечание. После того, как пользователь аутентифицируется, LinkedIn перенаправит пользователей на вашу страницу и добавит ваш URI с параметром `code="gibberishgibberishgibberish"`
Проанализируйте этот параметр из перенаправления и отправьте его на ваш сервер, чтобы получить код доступа. .

Итак, вы идете, не будьте идиотом, пытаясь использовать устаревшие модули angular2, которые больше не работают или хуже, ломаются при обновлении, потому что window не существует, будьте умны и просто используйте REST API до тех пор, пока LinkedIn Создает работающий SDK для Angular 2 (4).