HTTPはステートレスであるため、台湾は前と別のプロジェクトをやった後、証明書は、必見です。成功しフォアグラウンドでユーザーがログインした後、フォアグラウンド背景にはトークンが返さ。トークンを運ぶバックグラウンドにするたびに、フォアグラウンドを要求した後。
原理は非常に簡単です:
認可要求ヘッダがフォアグラウンドで添加される、以下の
見出さ記載の検証が成功し、関連情報を返す場合、api_token列と一致する値は、ユーザテーブルを取る背景。
説明トークンLaravel自体は、次の認証の下で実施した認証方法のいくつかの形式が付属しています。
トークンを運ぶための要求を開始した背景にフォアグラウンドで
背景は、現在のユーザーのログイン情報のAPIへの復帰を行う必要があり、アドレス /api/user
まず、追加ルート、ルートへ/ api.phpのアドオン
ルート::ミドルウェア( 'AUTH:API') - > GET( '/ユーザー'、関数(リクエスト$リクエスト){ エコー$要求- >ユーザー(); });
直接アクセスするブラウザが場合はhttp://mydomain.com/api/user
戻ります401 Unauthorized
設定/ auth.phpキー設定であり、次のされているので、
'ガード' => 'ウェブ' => 'ドライバ' => 'セッション'、 'プロバイダ' => 'ユーザ' ]、 'API' => 'ドライバ' => 'トークン'、 'プロバイダ' => 'ユーザー'、 ]、 ]、
アクセスは、APIを介して歩行が認証トークンである、と彼らは401を返すことができなかったので、何の認証トークンを提供していない見ることができます。
'driver' => 'token'
実際の呼び出しは、\vendor\laravel\framework\src\Illuminate\Auth\TokenGuard.php
上記のユーザーテーブルにapi_tokenフィールドを追加する必要があるユーザーを区別するために、我々は要求にapi_tokenパラメータを提供する必要が来ます
認定手続き呼び出し方法はgetTokenForRequestです
パブリック関数getTokenForRequest() { $トークン=の$ this - >要求- >クエリ(の$ this - > inputKey)。 IF(空($トークン)){ $トークン=の$ this - >要求- >入力(の$ this - > inputKey)。 } IF(空($トークン)){ $トークン=の$ this - >要求- > bearerToken(); } IF(空($トークン)){ $トークン=の$ this - >要求- > getPasswordに()。 } $トークンを返します。 }
bearerTokenにおける実際の検索Authorizationヘッダが存在するかどうか
パブリック関数bearerToken() { $ヘッダ=の$ this - >ヘッダ( '許可'、 '')。 (STR ::のstartsWith($ヘッダ、 'ベアラ')){もし 戻りのStr :: SUBSTR($ヘッダ、7)。 } }
api_tokenフィールドを追加するには、ユーザーテーブルを与えるphp artisan make:migration add_api_token_to_users --table=users
コンテンツを
クラスAddApiTokenToUsersは、マイグレーションが延び { / ** *マイグレーションを実行します。 * * @return無効 * / パブリック関数アップ() { スキーマ::テーブル( 'ユーザ'、機能(青写真$表){ $卓上>の文字列( 'api_token'、60) - )(ユニーク>; }); } / ** *移行を逆にします。 * * @returnボイド * / パブリック関数ダウン() { スキーマ::テーブル( 'ユーザ'、関数(青写真$表){ $卓上> dropColumn( 'api_token'); }); } }
ユーザーテーブルにオープンNavicatは、api_tokenの更新ユーザー。
オープン郵便配達
ヘッダは、鍵が許可され、値がapi_tokenのちょうどベアラ+スペース+データベース設定されています
これは、それの内容を返す、適切なユーザー情報を返すために、別のユーザーのトークンを変更し、認証は、基本的に完了した巧妙な機能であることを示します!
ここでは、完璧な詳細
完璧なロジック
の変更\app\Http\Controllers\Auth\RegisterController.php
保護された機能の作成(配列$データ) { 戻りユーザーは::([作成 の'name' => $データ[ '名前']、 [メール] => $データ[ 'メール']、 'パスワード' => bcryptのを($データ[ 'パスワード']) //添加这行 'api_token' => str_random(60) ])。 }
ユーザーモデルも$充填可能で変更されました
[$充填可能=保護された '名前'、 'メール'、 'パスワード'、 'api_token' ];
フロントページ場合は、バックグラウンドに要求Authorizationヘッダを開始する時間を渡す方法?従う
以下は、メソッドLaravel5.4の修正であることを注意を。新バージョンでは、ちょうど原則はそれを自分自身を行うことができるようになりますことを知って、多少異なる場合があります。
オープンは\resources\assets\js\bootstrap.js
CSRFトークンを参照します。適当な場所には、次のコードを追加します。
トークン= document.head.querySelector( 'メタ[名= "CSRFトークン"]')しましょう。 聞かせてapi_token = document.head.querySelector( 'メタ[名= "APIトークン"]'); IF(トークン){ //这个要参考axios的文档 window.axios.defaults.headers.common [ 'X-CSRF-TOKEN'] = Laravel.csrfToken = token.content。 //如果用的にjQuery //修正jqueryのAJAXクロスドメイントークンなし // jQuery.ajaxPrefilter(関数(オプション、originalOptions、jqXHR){ // // IF(options.crossDomain){ // jqXHR.setRequestHeader( '認可'、 api_token.content); // jqXHR.setRequestHeader( 'X-CSRF-TOKEN'、token.content); // //} //})。 } そうしないと { console.error( 'CSRFトークンが見つかりません:https://laravel.com/docs/csrf#csrf-x-csrf-token'); } (api_token){もし window.axios.defaults.headers.common [ '許可'] = api_token.content。 }他{ console.error( '許可が見つからないトークン:https://laravel.com/docs/csrf#csrf-x-csrf-token')。 }
最終更新日パブリックビューテンプレート \views\layouts\app.blade.php
< メタ 名 = "CSRFトークン" コンテンツ = "{{csrf_token()}}" > < メタ 名 = "APIトークン" コンテンツ = 「{{認証::チェック()? 'ベアラ' .Auth ::ユーザ() - > api_token 'ベアラ'}}」>
概要:
ユーザーが有効、無効のリターン401、効果的なリターンクエリの結果であるかどうかを判断するために、この分野の背景によると、本質的にはユーザーテーブルapi_tokenを追加します。
利点は欠点は、あまりにもシンプルかつ十分に安全である、理解しやすいです。
セキュリティを強化するために、以下の機能を実現することができます。
新しい値api_token成功するたびにログインリフレッシュした後
、公式Laravelが提供する実際にあるLaravelパスポートパッケージを。LaravelパスポートのOAuth2サーバとAPIで認証パッケージ。