{"id":29139,"date":"2021-06-08T17:43:00","date_gmt":"2021-06-08T14:43:00","guid":{"rendered":"https:\/\/themewp.inform.click\/?p=29139"},"modified":"2021-10-18T03:36:08","modified_gmt":"2021-10-18T00:36:08","slug":"uwierzytelnianie-aplikacji-mobilnej-za-pomoca-tokena-w-laravel","status":"publish","type":"post","link":"https:\/\/themewp.inform.click\/pl\/uwierzytelnianie-aplikacji-mobilnej-za-pomoca-tokena-w-laravel\/","title":{"rendered":"Uwierzytelnianie aplikacji mobilnej za pomoc\u0105 tokena w Laravel"},"content":{"rendered":"<p>Czy u\u017cywasz Laravela jako back-endu swojej aplikacji mobilnej? Je\u015bli tak, to prawdopodobnie szukasz prostego rozwi\u0105zania do uwierzytelniania aplikacji mobilnej. Wielu u\u017cytkownik\u00f3w mo\u017ce korzysta\u0107 z Twojej aplikacji mobilnej i chcesz przeprowadzi\u0107 uwierzytelnianie, aby udost\u0119pnia\u0107 tre\u015bci u\u017cytkownikom mobilnym. W tym artykule dowiemy si\u0119, jak przeprowadzi\u0107 uwierzytelnianie oparte na tokenach w Laravel. Mo\u017cesz r\u00f3wnie\u017c u\u017cy\u0107 tego samego podej\u015bcia do uwierzytelniania REST API.<\/p>\n<p>Zamierzamy zintegrowa\u0107 <a href=\"https:\/\/laravel.com\/docs\/master\/sanctum\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Laravel Sanctum,<\/a> kt\u00f3ry jest lekkim systemem uwierzytelniania. Mo\u017cesz uzna\u0107 to za zamiennik uwierzytelniania opartego na OAuth.<\/p>\n<p>Podczas korzystania z Sanctum tokeny API u\u017cytkownika s\u0105 przechowywane w bazie danych. Ten token musi zosta\u0107 wys\u0142any jako <code>Bearer<\/code>token poprzez <code>Authorization<\/code>nag\u0142\u00f3wek z aplikacji mobilnej do punkt\u00f3w ko\u0144cowych Laravel API. Te tokeny maj\u0105 zazwyczaj bardzo d\u0142ugi czas wa\u017cno\u015bci (lata).<\/p>\n<p>Bior\u0105c to pod uwag\u0119, przyjrzyjmy si\u0119, jak u\u017cywa\u0107 Sanctum do uwierzytelniania aplikacji mobilnych.<\/p>\n<h3>Zainstaluj i skonfiguruj Laravel Sanctum<\/h3>\n<p>Aby rozpocz\u0105\u0107, musisz najpierw zainstalowa\u0107 pakiet Sanctum w swojej aplikacji Laravel. Zainstaluj go za pomoc\u0105 polecenia:<\/p>\n<pre><code>composer require laravel\/sanctum<\/code><\/pre>\n<p>Nast\u0119pnie opublikuj pliki konfiguracyjne i migracyjne Sanctum, uruchamiaj\u0105c poni\u017csze polecenie.<\/p>\n<pre><code>php artisan vendor:publish --provider=\"LaravelSanctumSanctumServiceProvider\"<\/code><\/pre>\n<p>Nast\u0119pnie uruchom komend\u0119 migracji, kt\u00f3ra utworzy <code>personal_access_tokens<\/code>tabel\u0119 w Twojej bazie danych. To jest tabela, w kt\u00f3rej b\u0119d\u0105 przechowywane wszystkie tokeny API.<\/p>\n<pre><code>php artisan migrate<\/code><\/pre>\n<p>Domy\u015blnie ka\u017cde \u017c\u0105danie w Laravel wymaga tokena csrf. W przypadku braku tego tokena csrf, Laravel nie kontynuuje Twojego \u017c\u0105dania. Je\u015bli chodzi o generowanie token\u00f3w API za pomoc\u0105 Sanctum, musimy pomin\u0105\u0107 wysy\u0142anie tokena csrf. W tym celu dodaj <code>sanctum\/token<\/code>tras\u0119 do <code>$except<\/code>zmiennej <code>app\/Http\/Middleware\/VerifyCsrfToken.php<\/code>. T\u0119 <code>sanctum\/token<\/code>tras\u0119 utworz\u0119 w kolejnych krokach.<\/p>\n<pre><code>&lt;?php\n...\nclass VerifyCsrfToken extends Middleware\n{\n\u00a0\u00a0\u00a0\u00a0\/**\n\u00a0\u00a0\u00a0\u00a0\u00a0* The URIs that should be excluded from CSRF verification.\n\u00a0\u00a0\u00a0\u00a0\u00a0*\n\u00a0\u00a0\u00a0\u00a0\u00a0* @var array\n\u00a0\u00a0\u00a0\u00a0\u00a0*\/\n\u00a0\u00a0\u00a0\u00a0protected $except = [\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'sanctum\/token'\n\u00a0\u00a0\u00a0\u00a0];\n}<\/code><\/pre>\n<p>W celu uwierzytelnienia musimy wyda\u0107 u\u017cytkownikom token. Musisz wi\u0119c u\u017cy\u0107 <code>HasApiTokens<\/code>cechy do modelu u\u017cytkownika w nast\u0119puj\u0105cy spos\u00f3b.<\/p>\n<pre><code>&lt;?php\n\u00a0\nnamespace AppModels;\n...\nuse LaravelSanctumHasApiTokens;\n\u00a0\nclass User extends Authenticatable\n{\n\u00a0\u00a0\u00a0\u00a0use HasApiTokens, HasFactory, Notifiable;\n\u00a0\u00a0\u00a0\u00a0...\n}<\/code><\/pre>\n<h3>Wydawanie token\u00f3w API do uwierzytelniania<\/h3>\n<p>Aby w ka\u017cdym \u017c\u0105daniu wys\u0142a\u0107 token Bearer z nag\u0142\u00f3wkiem Authorization, nale\u017cy najpierw wystawi\u0107 token API. Zamierzam stworzy\u0107 metod\u0119, kt\u00f3ra generuje token API dla ka\u017cdego u\u017cytkownika. Do wystawienia tokena wymagane b\u0119dzie przes\u0142anie adresu e-mail, has\u0142a oraz urz\u0105dzenia u\u017cytkownika.<\/p>\n<p>Dodaj poni\u017csz\u0105 tras\u0119 w <code>routes\/web.php<\/code><\/p>\n<pre><code>Route::post('\/sanctum\/token', 'APITokenController@create_token');<\/code><\/pre>\n<p>Nast\u0119pnie utw\u00f3rz kontroler <code>APITokenController<\/code>za pomoc\u0105 polecenia:<\/p>\n<pre><code>php artisan make:controller APITokenController<\/code><\/pre>\n<p>Zdefiniuj <code>create_token()<\/code>metod\u0119 w nowo utworzonym kontrolerze w nast\u0119puj\u0105cy spos\u00f3b.<\/p>\n<pre><code>&lt;?php\n\u00a0\nnamespace AppHttpControllers;\n\u00a0\nuse AppModelsUser;\nuse IlluminateHttpRequest;\nuse IlluminateSupportFacadesHash;\nuse IlluminateValidationValidationException;\n\u00a0\nclass APITokenController extends Controller\n{\n\u00a0\u00a0\u00a0\u00a0public function create_token(Request $request)\n\u00a0\u00a0\u00a0\u00a0{\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$request-&gt;validate([\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'email' =&gt; 'required|email',\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'password' =&gt; 'required',\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'device_name' =&gt; 'required',\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0]);\n\u00a0\u00a0\u00a0\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$user = User::where('email', $request-&gt;input('email'))-&gt;first();\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0if (! $user ||! Hash::check($request-&gt;input('password'), $user-&gt;password)) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return [\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'error' =&gt; 'The provided credentials are incorrect.'\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0];\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\u00a0\u00a0\u00a0\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return $user-&gt;createToken($request-&gt;input('device_name'))-&gt;plainTextToken;\n\u00a0\u00a0\u00a0\u00a0}\n}<\/code><\/pre>\n<p>Powy\u017cszy kod najpierw sprawdza po\u015bwiadczenia u\u017cytkownika. Je\u015bli po\u015bwiadczenia s\u0105 poprawne, to w odpowiedzi wysy\u0142a token w formacie zwyk\u0142ego tekstu. Tutaj otrzymuj\u0119 warto\u015bci wej\u015bciowe, bior\u0105c pod uwag\u0119, \u017ce zostan\u0105 wys\u0142ane w obiekcie JSON.<\/p>\n<p>Spr\u00f3buj wys\u0142a\u0107 \u017c\u0105danie POST z po\u015bwiadczeniami u\u017cytkownika, a powiniene\u015b otrzyma\u0107 token w postaci zwyk\u0142ego tekstu. Ten token API mo\u017ce by\u0107 przechowywany na urz\u0105dzeniu mobilnym i u\u017cywany w nag\u0142\u00f3wku podczas wysy\u0142ania \u017c\u0105da\u0144 API.<\/p>\n<p>W moim przypadku u\u017cywam <a href=\"https:\/\/themewp.inform.click\/pl\/rozszerzenie-klienta-rest-dla-kodu-programu-visual-studio\/\" title=\"rozszerzenia kodu VS Rest Client,\">rozszerzenia kodu VS Rest Client,<\/a> a moja pro\u015bba <code>sanctum\/token<\/code>jest taka, jak pokazano na zrzucie ekranu poni\u017cej.<\/p>\n<p>Udaj si\u0119 do bazy danych i powiniene\u015b zobaczy\u0107, \u017ce tw\u00f3j token jest przechowywany w <code>personal_access_tokens<\/code>tabeli.<\/p>\n<p>Sanctum utworzy wiele token\u00f3w za ka\u017cdym razem, gdy trafisz na <code>sanctum\/token<\/code>tras\u0119 z poprawnymi danymi uwierzytelniaj\u0105cymi. Je\u015bli chcesz odwo\u0142a\u0107 poprzedni token, dodaj poni\u017csz\u0105 instrukcj\u0119 przed ostatni\u0105 instrukcj\u0105 powrotu powy\u017cszego kodu.<\/p>\n<pre><code>\/\/ Revoke previous tokens...\n$user-&gt;tokens()-&gt;delete();\n\u00a0\nreturn $user-&gt;createToken($request-&gt;input('device_name'))-&gt;plainTextToken;<\/code><\/pre>\n<p>Na koniec chro\u0144 trasy, dodaj\u0105c <code>auth:sanctum<\/code>oprogramowanie po\u015brednicz\u0105ce w nast\u0119puj\u0105cy spos\u00f3b.<\/p>\n<pre><code>Route::middleware('auth:sanctum')-&gt;get('\/products', function() {\n\u00a0\u00a0\u00a0\u00a0\/\/ write a code\n});<\/code><\/pre>\n<p>Oprogramowanie po\u015brednicz\u0105ce sprawdza, czy token zosta\u0142 odebrany w nag\u0142\u00f3wku autoryzacji. Je\u015bli token API jest poprawny, to tylko on umo\u017cliwia przej\u015bcie do trasy.<\/p>\n<p>Na przyk\u0142ad w kodzie VS mo\u017cesz wys\u0142a\u0107 token API jako token Bearer z nag\u0142\u00f3wkiem Authorization, jak pokazano poni\u017cej.<\/p>\n<p>Mam nadziej\u0119, \u017ce rozumiesz, jak zintegrowa\u0107 uwierzytelnianie aplikacji mobilnych za pomoc\u0105 tokena w Laravelu. Chcia\u0142bym us\u0142ysze\u0107 wasze przemy\u015blenia i sugestie w sekcji komentarzy poni\u017cej.<\/p>\n<h4>Powi\u0105zane artyku\u0142y<\/h4>\n<ul>\n<li><a href=\"https:\/\/themewp.inform.click\/pl\/jak-stworzyc-bloga-z-laravel\/\" title=\"Jak stworzy\u0107 bloga z Laravel\">Jak stworzy\u0107 bloga z Laravel<\/a><\/li>\n<li><a href=\"https:\/\/themewp.inform.click\/pl\/przewodnik-po-dodaniu-google-recaptcha-v3-do-twojej-witryny-laravel\/\" title=\"Przewodnik po dodaniu Google reCAPTCHA v3 do Twojej witryny Laravel\">Przewodnik po dodaniu Google reCAPTCHA v3 do Twojej witryny Laravel<\/a><\/li>\n<li><a href=\"https:\/\/themewp.inform.click\/pl\/jak-przeslac-wideo-na-youtube-w-aplikacji-laravel\/\" title=\"Jak przes\u0142a\u0107 wideo na YouTube w aplikacji Laravel\">Jak przes\u0142a\u0107 wideo na YouTube w aplikacji Laravel<\/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>W tym samouczku uczymy si\u0119, jak zintegrowa\u0107 uwierzytelnianie aplikacji mobilnych przy u\u017cyciu Laravela jako backendu. Laravel Sanctum to pakiet, kt\u00f3ry<\/p>\n","protected":false},"author":1,"featured_media":21639,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[501],"tags":[847],"class_list":["post-29139","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-laravel","tag-affiai-pl"],"_links":{"self":[{"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/posts\/29139","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=29139"}],"version-history":[{"count":0,"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/posts\/29139\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/media\/21639"}],"wp:attachment":[{"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/media?parent=29139"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/categories?post=29139"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/tags?post=29139"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}