Laravel は広く使用されている PHP フレームワークであり、その Cookie コンポーネントは Web 開発でユーザーの行動を追跡するために使用されます。ただし、ユーザーのプライバシーへの懸念から、多くのブラウザーはサードパーティ Cookie の使用を制限し始めています。ユーザーのプライバシーを保護するために、Laravel では Cookie の代替手段をいくつか導入していますが、この記事ではそのうちの最も一般的な方法を 2 つ紹介します。
まず、Laravel 独自の Session コンポーネントを使用して Cookie を置き換える方法を見てみましょう。デフォルトでは、Laravel のセッションコンポーネントは Cookie を使用して現在のセッションの ID を保存します。ただし、session.php 構成ファイル内のドライバー オプションを変更することで、セッション ドライバーの種類を変更できます。デフォルトでは、ドライバー オプションの値は「file」です。これは、セッションがデータをファイルに保存することを意味します。ドライバー オプションの値を「データベース」に変更すると、セッションはデータをデータベース テーブルに保存します。 Cookie の代わりに Session コンポーネントを使用すると、ブラウザがサードパーティ Cookie をランダムに削除または拒否する問題を回避できます。
第二に、Laravel は Cookie を置き換えるための TokenGuard も提供します。 TokenGuard は Laravel 認証フレームワークの一部であり、これによりユーザーは Cookie の代わりに URL に認証トークンを保存できます。 TokenGuard を使用するには、AppServiceProvider で Auth::viaRequest() メソッドを呼び出し、承認トークンと一致するコールバック関数を渡す必要があります。認証が必要な各コントローラー メソッドでは、URL から認可トークンを読み取り、Auth::loginUsingId() メソッドを呼び出してユーザーを認証する必要があります。
次に、TokenGuard を使用して Cookie を置き換える方法を示す完全なコード例を紹介します。まず、AppServiceProvider の Auth::viaRequest() メソッドを変更する必要があります。
public function boot() { $this->registerPolicies(); Auth::viaRequest('token', function ($request) { return User::where('api_token', $request->token)->first(); }); }
このコールバック関数では、$request オブジェクトから $token パラメーターを読み取り、それをユーザー認証に使用します。認可トークンが要件を満たしている場合、この関数は対応する User インスタンスを返し、それ以外の場合は null を返します。
次に、ユーザーの ID を認証する必要があるコントローラー メソッドで、メソッド宣言に $request パラメーターを追加します。
public function update(Request $request, $id) { $user = Auth::guard('api')->user(); if ($user && $user->id === $id) { // ... } }
次に、URL に認証トークンを渡すことができます。 RESTful 更新メソッド (例: /users/1?token=your-token)。最後に、Auth::loginUsingId() メソッドを呼び出して、ユーザーが対応するユーザー情報を更新する権限を持っていることを確認することで、ユーザー認証を完了できます。
TokenGuard を使用して Cookie を置き換える方法は非常に柔軟で、幅広い適用範囲があります。 TokenGuard に加えて、Laravel は OAuth2 や OpenID Connect などの標準認証プロトコルの使用もサポートしており、より安全で柔軟な代替手段を提供できます。
つまり、Laravel が提供する代替手段である Session と TokenGuard を合理的に使用すると、Cookie がランダムに削除され拒否される問題を十分に解決できると同時に、ユーザーのプライバシー保護も向上します。もちろん、それぞれの選択肢には独自の長所と短所があり、特定のシナリオに従って選択して使用する必要があります。
以上がlaravelクッキーの置き換えの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。