Laravelで署名されたURL
プロジェクトでは、ユーザーが何らかの方法でURLを変更しなかったことを確認する必要があるコードを実行するユニークなURLを生成する必要があります.例えば、ニュースレターからユーザーを解雇するか、多分パスワードなしでサインアップするユーザーのためにリンクを作成するかもしれないならば、あなたはあなたの電子メール加入者のために割引を提供したいかもしれません.
あなたのユースケースが何であれ、LALAVELは署名されたURLで働くことを可能にする機能を提供します.
署名されたURLを生成するには、名前付きルートを作成する必要があります.例えば、リンクをクリックしたときにユーザを取り消す名前付きルートを作成するつもりです.
また、いくつかの時間が経過した後に期限切れになるURLを作成することもできます
我々は今署名されたURLを作成しました、しかし、この点まで、我々はハッシュを確かめていません.そのためには、内蔵ミドルウェアを使用できます
URLが無効なときにユーザーが見ているエラーをカスタマイズすることもできます.これは、
場合によっては、コントローラのURLを確認したい場合があります.を削除することでこれを行うことができます
あなたのユースケースが何であれ、LALAVELは署名されたURLで働くことを可能にする機能を提供します.
署名URLの生成
署名されたURLを生成するには、名前付きルートを作成する必要があります.例えば、リンクをクリックしたときにユーザを取り消す名前付きルートを作成するつもりです.
// routes/web.php
Route::get('/unsubscribe/{user}', [SubscriptionsController::class, 'unsubscribe'])
->name('unsubscribe');
さて、署名されたURLを生成するには、URLファサードを使用できます.use Illuminate\Support\Facades\URL;
return URL::signedRoute('unsubscribe', ['user' => 1]);
The first parameter to the signedRoute
メソッドはルートの名前です.ここで私はunsubscribed
それが上記のルートを与えた名前です、そして、2番目のパラメタは我々がルート、この場合、ユーザーIDに通過するルートパラメタです.https://yoursite.com/unsubscribe/1?signature=7594beb1a7af889d997eedc50f68eadb8b2e8d4097ba3a9ff1c600ffa8a02e49
ご覧のように、ララベルはsignature
ハッシュを持つURLへのパラメータ.URLを指定しているので、ユーザーがそのURLの一部を変更するとハッシュが無効になります.一時的に署名されたURL
また、いくつかの時間が経過した後に期限切れになるURLを作成することもできます
temporarySignedRoute
方法return URL::temporarySignedRoute(
'unsubscribe', now()->addMinutes(30), ['user' => 1]
);
このメソッドへの2番目のパラメータは、このメソッドを使用してURLが期限切れになる時間ですexpires
パラメータはURLに追加され、laravelは無効としてこのURLを報告します.URLの確認
我々は今署名されたURLを作成しました、しかし、この点まで、我々はハッシュを確かめていません.そのためには、内蔵ミドルウェアを使用できます
signed
我々のルートで.これを行うには、ルート宣言でミドルウェアを追加します.// routes/web.php
Route::get('/unsubscribe/{user}', [SubscriptionsController::class, 'unsubscribe'])
->name('unsubscribe')
->middleware('signed');
このミドルウェアを加えることによって、ラーラーベルは自動的にハッシュをチェックして、403のHTTPコードを投げます.エラーページのパーソナライズ。
URLが無効なときにユーザーが見ているエラーをカスタマイズすることもできます.これは、
InvalidSignatureException
:// app\Exceptions\Handler.php
use Illuminate\Routing\Exceptions\InvalidSignatureException;
/**
* Register the exception handling callbacks for the application.
*
* @return void
*/
public function register()
{
$this->renderable(function (InvalidSignatureException $e) {
return response()->view('error.link-expired', [], 403);
});
}
このクロージャの内部では、無効な単一のURLを訪問するときにユーザーが何を表示するかを定義できます.ミドルウェアなしのURLの検証
場合によっては、コントローラのURLを確認したい場合があります.を削除することでこれを行うことができます
singed
あなたのルート定義からのミドルウェアとその代わりにhasValidSignature
リクエストで.public function unsubscribe(Request $request)
{
if (!$request->hasValidSignature()) {
abort(401);
}
//...
}
私たちがカスタム体験を必要とするならば、これはもう少し柔軟性を許します.Reference
この問題について(Laravelで署名されたURL), 我々は、より多くの情報をここで見つけました https://dev.to/cosmeoes/signed-urls-with-laravel-1mnbテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol