Позвольте мне перефразировать…
В 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).