{"id":26677,"date":"2021-04-27T14:06:00","date_gmt":"2021-04-27T11:06:00","guid":{"rendered":"https:\/\/themewp.inform.click\/?p=26677"},"modified":"2021-10-18T03:54:24","modified_gmt":"2021-10-18T00:54:24","slug":"system-logowania-spolecznosciowego-za-pomoca-laravel-socialite","status":"publish","type":"post","link":"https:\/\/themewp.inform.click\/pl\/system-logowania-spolecznosciowego-za-pomoca-laravel-socialite\/","title":{"rendered":"System logowania spo\u0142eczno\u015bciowego za pomoc\u0105 Laravel Socialite"},"content":{"rendered":"<p><a href=\"https:\/\/scotch.io\/tutorials\/laravel-social-authentication-with-socialite\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">\u0179r\u00f3d\u0142o<\/a>: Ten artyku\u0142 jest inspirowany tym postem <a href=\"https:\/\/scotch.io\/tutorials\/laravel-social-authentication-with-socialite\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Laravel Social Authentication with Socialite<\/a><\/p>\n<p>Czy chcesz wdro\u017cy\u0107 system logowania spo\u0142eczno\u015bciowego na swojej stronie Laravel? Zezwalaj\u0105c na logowanie spo\u0142eczno\u015bciowe, Twoi u\u017cytkownicy nie musz\u0105 rejestrowa\u0107 si\u0119 w Twojej witrynie. Oszcz\u0119dza nam to r\u00f3wnie\u017c wiele pracy, jak wys\u0142anie linku aktywacyjnego, weryfikacj\u0119 konta e-mail. W tym artykule dowiemy si\u0119, jak doda\u0107 system logowania spo\u0142eczno\u015bciowego za pomoc\u0105 spo\u0142eczno\u015bci Laravel.<\/p>\n<p><a href=\"https:\/\/github.com\/laravel\/socialite\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external\"><\/a>Biblioteka <a href=\"https:\/\/github.com\/laravel\/socialite\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Laravel Socialite<\/a> zapewnia uwierzytelnianie OAuth za pomoc\u0105 Facebooka, Twittera, Google, LinkedIn, GitHub i Bitbucket. To, co musimy zrobi\u0107, to zainstalowa\u0107 t\u0119 bibliotek\u0119 na naszej stronie Laravel, skonfigurowa\u0107 j\u0105, pobra\u0107 klucze API ze strony spo\u0142eczno\u015bciowej i gotowe.<\/p>\n<p><a href=\"https:\/\/themewp.inform.click\/wp-content\/uploads\/2021\/04\/post-20876-60823669e70f3.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/themewp.inform.click\/wp-content\/uploads\/2021\/04\/post-20876-60823669e70f3.png\" alt=\"System logowania spo\u0142eczno\u015bciowego za pomoc\u0105 Laravel Socialite\" ><\/a><\/p>\n<h3>Utw\u00f3rz tabel\u0119 u\u017cytkownik\u00f3w<\/h3>\n<p>Aby wdro\u017cy\u0107 system logowania spo\u0142eczno\u015bciowego, musimy stworzy\u0107 tabel\u0119 u\u017cytkownik\u00f3w, w kt\u00f3rej b\u0119d\u0105 przechowywane dane podane przez serwis spo\u0142eczno\u015bciowy.<\/p>\n<p>Je\u015bli masz now\u0105 instalacj\u0119 Laravela, otw\u00f3rz narz\u0119dzie wiersza polece\u0144 w katalogu g\u0142\u00f3wnym projektu i uruchom polecenie <code>php artisan make:auth<\/code>. To polecenie utworzy kontrolery uwierzytelniania, takie jak LoginController, RegisterController itp., kt\u00f3re znajduj\u0105 si\u0119 w katalogu app\/Http\/Controllers\/Auth. Tworzy r\u00f3wnie\u017c widoki login.blade.php, register.blade.php w katalogu resources\/view\/auth.<\/p>\n<p>Nast\u0119pnie otw\u00f3rz tabel\u0119 migracji dla u\u017cytkownik\u00f3w. Zmodyfikujemy t\u0119 domy\u015bln\u0105 migracj\u0119 i dodamy dwie dodatkowe kolumny o nazwie provider i provider_id.<\/p>\n<pre><code>public function up()\n{\n\u00a0\u00a0\u00a0\u00a0Schema::create('users', function (Blueprint $table) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$table-&gt;increments('id');\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$table-&gt;string('name');\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$table-&gt;string('email')-&gt;nullable();\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$table-&gt;string('password')-&gt;nullable();\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$table-&gt;string('provider');\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$table-&gt;string('provider_id');\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$table-&gt;rememberToken();\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$table-&gt;timestamps();\n\u00a0\u00a0\u00a0\u00a0});\n}<\/code><\/pre>\n<p>Jak wida\u0107, ustawili\u015bmy kolumny e-mail i has\u0142a na warto\u015b\u0107 zerow\u0105. Dlaczego? Kiedy u\u017cywamy uwierzytelniania logowania spo\u0142eczno\u015bciowego, nie ma gwarancji, \u017ce otrzymamy identyfikator e-mail u\u017cytkownika. W takim przypadku r\u00f3wnie\u017c has\u0142o nie jest potrzebne. Dlatego zachowujemy adres e-mail i has\u0142o do warto\u015bci nullable. Dostawca kolumny b\u0119dzie przechowywa\u0107 nazw\u0119 serwisu spo\u0142eczno\u015bciowego, tak\u0105 jak facebook, twitter itp. Kolumna provider_id b\u0119dzie przechowywa\u0107 identyfikator spo\u0142eczno\u015bciowy u\u017cytkownika odpowiedniego do serwisu spo\u0142eczno\u015bciowego.<\/p>\n<p>Po zmodyfikowaniu migracji u\u017cytkownika jak powy\u017cej uruchom polecenie <code>php artisan migrate<\/code>. W Twojej bazie danych zostanie utworzona tabela o nazwie \u201eu\u017cytkownicy&quot;.<\/p>\n<p>Prawdopodobnie podczas uruchamiania polecenia migracji pojawi si\u0119 jaki\u015b dziwny b\u0142\u0105d zwi\u0105zany z d\u0142ugo\u015bci\u0105 znak\u00f3w. Je\u015bli tak, otw\u00f3rz plik AppServiceProvider.php z katalogu app\/Providers. W tym pliku musimy ustawi\u0107 domy\u015bln\u0105 d\u0142ugo\u015b\u0107 ci\u0105gu dla kolumn tabeli bazy danych.<\/p>\n<p>Plik AppServiceProvider.php<\/p>\n<pre><code>&lt;?php\n\u00a0\nnamespace AppProviders;\n\u00a0\nuse IlluminateSupportServiceProvider;\nuse IlluminateSupportFacadesSchema;\n\u00a0\nclass AppServiceProvider extends ServiceProvider\n{\n\u00a0\u00a0\u00a0\u00a0\/**\n\u00a0\u00a0\u00a0\u00a0\u00a0* Bootstrap any application services.\n\u00a0\u00a0\u00a0\u00a0\u00a0*\n\u00a0\u00a0\u00a0\u00a0\u00a0* @return void\n\u00a0\u00a0\u00a0\u00a0\u00a0*\/\n\u00a0\u00a0\u00a0\u00a0public function boot()\n\u00a0\u00a0\u00a0\u00a0{\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Schema::defaultStringLength(255);\n\u00a0\u00a0\u00a0\u00a0}\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\/**\n\u00a0\u00a0\u00a0\u00a0\u00a0* Register any application services.\n\u00a0\u00a0\u00a0\u00a0\u00a0*\n\u00a0\u00a0\u00a0\u00a0\u00a0* @return void\n\u00a0\u00a0\u00a0\u00a0\u00a0*\/\n\u00a0\u00a0\u00a0\u00a0public function register()\n\u00a0\u00a0\u00a0\u00a0{\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/\n\u00a0\u00a0\u00a0\u00a0}\n}<\/code><\/pre>\n<h3>Model u\u017cytkownika<\/h3>\n<p>Domy\u015blnie Laravel zawiera model AppUser Eloquent w katalogu aplikacji. Otw\u00f3rz User.php z folderu aplikacji. Dodaj jeszcze dwie kolumny provider, provider_id do zmiennej $fillable.<\/p>\n<pre><code>protected $fillable = [\n\u00a0\u00a0\u00a0\u00a0'name', 'email', 'password', 'provider', 'provider_id',\n];<\/code><\/pre>\n<h3>Zainstaluj i skonfiguruj Laravel Socialite<\/h3>\n<p>Aby zainstalowa\u0107 t\u0119 bibliotek\u0119, powiniene\u015b mie\u0107 zainstalowany program <a href=\"https:\/\/getcomposer.org\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">composer<\/a> w swoim systemie.<\/p>\n<p>W swoim narz\u0119dziu wiersza polece\u0144 uruchom poni\u017csze polecenie.<\/p>\n<p><code>composer require laravel\/socialite<\/code><\/p>\n<p>Po zainstalowaniu biblioteki zarejestruj LaravelSocialiteSocialiteServiceProvider w swoim pliku konfiguracyjnym config\/app.php.<\/p>\n<pre><code>'providers' =&gt; [\n\u00a0\u00a0\u00a0\u00a0\/\/ Other service providers...\n\u00a0\n\u00a0\u00a0\u00a0\u00a0LaravelSocialiteSocialiteServiceProvider::class,\n],<\/code><\/pre>\n<p>W tym samym pliku config\/app.php, pod tablic\u0105 alias\u00f3w, dodaj fasad\u0119 Socialite.<\/p>\n<pre><code>'Socialite' =&gt; LaravelSocialiteFacadesSocialite::class,<\/code><\/pre>\n<p>Teraz nadszed\u0142 czas, aby zarejestrowa\u0107 swoj\u0105 aplikacj\u0119 w serwisie spo\u0142eczno\u015bciowym. Na przyk\u0142ad zak\u0142adamy, \u017ce chcesz zaimplementowa\u0107 uwierzytelnianie logowania na Facebooku. Wi\u0119c \u015bmia\u0142o <a href=\"https:\/\/developers.facebook.com\/docs\/apps\/register\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">stw\u00f3rz aplikacj\u0119 na Facebooku<\/a>.<\/p>\n<p>Gdy b\u0119dziesz gotowy z identyfikatorem aplikacji, sekretem aplikacji na Facebooku, otw\u00f3rz plik config\/services.php i dodaj do niego poni\u017cszy kod.<\/p>\n<pre><code>'facebook' =&gt; [\n\u00a0\u00a0\u00a0\u00a0'client_id' =&gt; env('FB_APP_ID'),\n\u00a0\u00a0\u00a0\u00a0'client_secret' =&gt; env('FB_APP_SECRET'),\n\u00a0\u00a0\u00a0\u00a0'redirect' =&gt; env('FB_CALLBACK_URL'),\n],<\/code><\/pre>\n<p>Jak pokazano w powy\u017cszym kodzie, musimy przechowywa\u0107 szczeg\u00f3\u0142y naszej aplikacji i adres URL wywo\u0142ania zwrotnego w pliku .env.<\/p>\n<pre><code>FB_APP_ID=PASTE_APP_ID_HERE\nFB_APP_SECRET=PASTE_APP_SECRET_HERE\nFB_CALLBACK_URL=YOU_SITE_URL\/login\/facebook\/callback<\/code><\/pre>\n<p>Przekazali\u015bmy adres URL wywo\u0142ania zwrotnego jako YOU_SITE_URL\/login\/facebook\/callback. Teraz nadszed\u0142 czas, aby utworzy\u0107 dwie trasy, jedn\u0105 do przekierowania u\u017cytkownika do dostawcy OAuth (w naszym przypadku Facebook) i drug\u0105 do odbierania wywo\u0142ania zwrotnego od dostawcy po uwierzytelnieniu.<\/p>\n<h3>Rzeczywisty kod do obs\u0142ugi OAuth<\/h3>\n<p>Na tym etapie zako\u0144czyli\u015bmy ca\u0142\u0105 konfiguracj\u0119 Laravel Socialite. Czas napisa\u0107 kod, kt\u00f3ry obs\u0142uguje przekierowanie OAuth i pobiera dane u\u017cytkownika.<\/p>\n<p>Otw\u00f3rz plik login.blade.php i umie\u015b\u0107 w nim poni\u017cszy kod prawdopodobnie po przycisku przesy\u0142ania.<\/p>\n<pre><code>&lt;div class=\"form-group\"&gt;\n\u00a0\u00a0\u00a0\u00a0&lt;div class=\"col-md-6 col-md-offset-4\"&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Login with\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;a href=\"{{ url('\/login\/facebook') }}\"&gt;&lt;i class=\"fa fa-facebook-official\" aria-hidden=\"true\"&gt;&lt;\/i&gt; Facebook&lt;\/a&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;a href=\"{{ url('\/login\/twitter') }}\"&gt;&lt;i class=\"fa fa-twitter\" aria-hidden=\"true\"&gt;&lt;\/i&gt; Twitter&lt;\/a&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;a href=\"{{ url('\/login\/github') }}\"&gt;&lt;i class=\"fa fa-github\" aria-hidden=\"true\"&gt;&lt;\/i&gt; Github&lt;\/a&gt;\n\u00a0\u00a0\u00a0\u00a0&lt;\/div&gt;\n&lt;\/div&gt;<\/code><\/pre>\n<p>Tutaj dodajemy link do Github i Twittera. Kroki dodawania OAuth dla tych serwis\u00f3w spo\u0142eczno\u015bciowych s\u0105 takie same jak na Facebooku. Wystarczy utworzy\u0107 aplikacj\u0119 odpowiednich serwis\u00f3w spo\u0142eczno\u015bciowych i przechowywa\u0107 te dane w taki sam spos\u00f3b, jak dodali\u015bmy na Facebooku.<\/p>\n<p>W pliku trasy zdefiniuj trasy jak poni\u017cej.<\/p>\n<pre><code>Route::get('login\/{provider}', 'AuthLoginController@redirectToProvider');\nRoute::get('login\/{provider}\/callback', 'AuthLoginController@handleProviderCallback');<\/code><\/pre>\n<p>Nast\u0119pnie przejd\u017a do app\/Http\/Controllers\/Auth\/LoginController.php i zmodyfikuj plik. Powiniene\u015b doda\u0107 w nim poni\u017cszy kod.<\/p>\n<pre><code>&lt;?php\n\u00a0\nnamespace AppHttpControllersAuth;\n\u00a0\nuse AppHttpControllersController;\nuse IlluminateFoundationAuthAuthenticatesUsers;\nuse Socialite;\nuse AppUser;\nuse Auth;\n\u00a0\nclass LoginController extends Controller\n{\n\u00a0\u00a0\u00a0\u00a0\/**\n\u00a0\u00a0\u00a0\u00a0\u00a0* Redirect the user to the GitHub authentication page.\n\u00a0\u00a0\u00a0\u00a0\u00a0*\n\u00a0\u00a0\u00a0\u00a0\u00a0* @return Response\n\u00a0\u00a0\u00a0\u00a0\u00a0*\/\n\u00a0\u00a0\u00a0\u00a0public function redirectToProvider($provider)\n\u00a0\u00a0\u00a0\u00a0{\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return Socialite::driver($provider)-&gt;scopes(['email'])-&gt;redirect();\n\u00a0\u00a0\u00a0\u00a0}\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\/**\n\u00a0\u00a0\u00a0\u00a0\u00a0* Obtain the user information from GitHub.\n\u00a0\u00a0\u00a0\u00a0\u00a0*\n\u00a0\u00a0\u00a0\u00a0\u00a0* @return Response\n\u00a0\u00a0\u00a0\u00a0\u00a0*\/\n\u00a0\u00a0\u00a0\u00a0public function handleProviderCallback($provider)\n\u00a0\u00a0\u00a0\u00a0{\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$user = Socialite::driver($provider)-&gt;user();\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$authUser = $this-&gt;findOrCreateUser($user, $provider);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Auth::login($authUser, true);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return redirect($this-&gt;redirectTo);\n\u00a0\u00a0\u00a0\u00a0}\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\/**\n\u00a0\u00a0\u00a0\u00a0\u00a0* If a user has registered before using social auth, return the user\n\u00a0\u00a0\u00a0\u00a0\u00a0* else, create a new user object.\n\u00a0\u00a0\u00a0\u00a0\u00a0* @param\u00a0 $user Socialite user object\n\u00a0\u00a0\u00a0\u00a0\u00a0* @param $provider Social auth provider\n\u00a0\u00a0\u00a0\u00a0\u00a0* @return\u00a0 User\n\u00a0\u00a0\u00a0\u00a0\u00a0*\/\n\u00a0\u00a0\u00a0\u00a0public function findOrCreateUser($user, $provider)\n\u00a0\u00a0\u00a0\u00a0{\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$authUser = User::where('provider_id', $user-&gt;id)-&gt;first();\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0if ($authUser) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return $authUser;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return User::create([\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'name'\u00a0\u00a0\u00a0\u00a0 =&gt; $user-&gt;name,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'email'\u00a0\u00a0\u00a0 =&gt; $user-&gt;email,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'provider' =&gt; $provider,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'provider_id' =&gt; $user-&gt;id\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0]);\n\u00a0\u00a0\u00a0\u00a0}\n}<\/code><\/pre>\n<p>Metoda redirectToProvider przekierowuje u\u017cytkownika do strony logowania serwisu spo\u0142eczno\u015bciowego. Gdy u\u017cytkownik autoryzuje aplikacj\u0119, pobieramy informacje o u\u017cytkowniku w funkcji handleProviderCallback. Je\u017celi u\u017cytkownik nie istnieje w naszym systemie to dodajemy jego dane za pomoc\u0105 metody findOrCreateUser.<\/p>\n<p>Mamy nadziej\u0119, \u017ce pozna\u0142e\u015b system logowania spo\u0142eczno\u015bciowego przy u\u017cyciu Laravel Socialite. Je\u015bli masz jakie\u015b pytania lub sugestie, zostaw komentarz poni\u017cej.<\/p>\n<h4>Powi\u0105zane artyku\u0142y<\/h4>\n<ul>\n<li><a href=\"https:\/\/themewp.inform.click\/pl\/jak-korzystac-z-funkcji-laravel-wielu-polaczen-z-baza-danych-na-stronie-internetowej\/\" title=\"Jak korzysta\u0107 z funkcji wielu po\u0142\u0105cze\u0144 z baz\u0105 danych Laravel na stronie internetowej?\">Jak korzysta\u0107 z funkcji wielu po\u0142\u0105cze\u0144 z baz\u0105 danych Laravel na stronie internetowej?<\/a><\/li>\n<li><a href=\"https:\/\/themewp.inform.click\/pl\/tworz-wielojezyczna-strone-internetowa-w-php-za-pomoca-laravel-framework\/\" title=\"Stw\u00f3rz wieloj\u0119zyczn\u0105 stron\u0119 internetow\u0105 w PHP za pomoc\u0105 Laravel Framework\">Stw\u00f3rz wieloj\u0119zyczn\u0105 stron\u0119 internetow\u0105 w PHP za pomoc\u0105 Laravel Framework<\/a><\/li>\n<\/ul>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">\u0179r\u00f3d\u0142o nagrywania:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/artisansweb.net\" class=\"external external_icon\">artisansweb.net<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Je\u015bli chcesz doda\u0107 system logowania spo\u0142eczno\u015bciowego na swojej stronie Laravel, to Laravel Socialite to biblioteka, kt\u00f3ra pomo\u017ce nam skonfigurowa\u0107 ten system.<\/p>\n","protected":false},"author":1,"featured_media":21626,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[180,501],"tags":[847],"class_list":["post-26677","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-chrome-8","category-laravel","tag-affiai-pl"],"_links":{"self":[{"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/posts\/26677","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/comments?post=26677"}],"version-history":[{"count":0,"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/posts\/26677\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/media\/21626"}],"wp:attachment":[{"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/media?parent=26677"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/categories?post=26677"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/tags?post=26677"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}