ホームページ > バックエンド開発 > PHPチュートリアル > パスワードを殺しましょう!マジックログインリンクは救助にリンクします!

パスワードを殺しましょう!マジックログインリンクは救助にリンクします!

William Shakespeare
リリース: 2025-02-10 12:27:14
オリジナル
540 人が閲覧しました

パスワードのトラブルに別れを告げ、安全で便利なパスワードのないログインを受け入れましょう!この記事では、セキュリティを改善し、ユーザーエクスペリエンスを簡素化するために、Laravelアプリケーションで1回限りのリンクベースのパスワードフリーログインシステムを実装する方法を紹介します。

Let's Kill the Password! Magic Login Links to the Rescue!

この記事は、Younes RafieとWern Anchetaによってレビューされました。 SetePointのすべてのピアレビューアーズに感謝します。


アイデンティティ認証テクノロジーは、従来のメールボックスパスワードの組み合わせからソーシャルログイン、今日のパスワードレスログイン(より正確には「電子メールのみの」ログイン)まで進化し続けています。パスワードレスログインシステムは、ユーザーのメールにログインリンクを送信することによりIDを検証します。

Let's Kill the Password! Magic Login Links to the Rescue!

パスワードのないログインプロセスは次のとおりです

    ユーザーにログインページ
  1. メールアドレスを入力して確認します
  2. システムは、電子メールアドレスにログインリンクを送信します
  3. リンクをクリックした後、ユーザーはアプリケーションにリダイレクトされ、ログインします
  4. リンクが無効です。
  5. アプリケーションのパスワードを忘れているが、メールを登録することを忘れない場合、この方法は非常に便利です。この技術は、Slackなどのアプリケーションでも採用されています。このチュートリアルでは、Laravelアプリケーションでこのシステムを実装する方法を示します。こちらの完全なコードを参照してください。
  6. コアポイント

パスワードを放棄します:

1回限りのURLに基​​づいて「マジックログインリンク」を使用して、シンプルで安全なパスワードのない認証を実現します。

  • ユーザーフレンドリーな設定:ユーザーフレンドリーな設定:事前定義されたコマンドと少数の変更を使用して、Laravelアプリケーションでこのシステムを簡単に実装します。
  • セキュリティの拡張:マジックログインリンクは、弱いパスワードやフィッシング攻撃などの従来の暗号システムの一般的な脆弱性を排除します。
  • 柔軟性とコントロール:ユーザーは、柔軟性とセキュリティを考慮して、従来のパスワードでログインすることを選択できます。
  • 効率的なトークン管理:システムは、トークンの有効期限と検証を自動的に処理して、トークンが正しく使用され、長期間有効でないことを確認します。
  • アプリを作成します
  • 最初に、新しいLaravelアプリケーションを作成します。このチュートリアルでは、laravel 5.2:
を使用しています

ユーザーとパスワードを備えたLaravelプロジェクトを既に持っている場合は、心配しないでください。通常の認証プロセスは変更されませんが、その上にレイヤーを追加します。ユーザーは引き続きパスワードでログインすることを選択できます。

データベース設定
composer create-project laravel/laravel passwordless-laravel 5.2.*
ログイン後にコピー
ログイン後にコピー

移行を実行する前に、MySQLデータベースをセットアップする必要があります。

ルートディレクトリで.ENVファイルを開き、ホスト名、ユーザー名、データベース名を入力します:

Homestead改善ボックスを使用している場合、データベース/ユーザー名/パスワードの組み合わせはHomestead、Homestead、Secretです。

認証を構築
<code>[...]
DB_CONNECTION=mysql
DB_HOST=localhost
DB_DATABASE=passwordless-app
DB_USERNAME=username
DB_PASSWORD=
[...]</code>
ログイン後にコピー
ログイン後にコピー

Laravelバージョン5.2は、優れた機能を紹介します。1つのコマンドだけでプレハブ認証レイヤーを追加します。これをしましょう:

composer create-project laravel/laravel passwordless-laravel 5.2.*
ログイン後にコピー
ログイン後にコピー

このコマンドは、認証に必要なものすべて、つまりビュー、コントローラー、ルートを構築します。

移行

データベース/移行ディレクトリでは、生成されたLaravelアプリケーションには、ユーザーのテーブルとパスワード_resetsテーブルを作成する移行ファイルが含まれていることがわかります。

アプリに通常の認証プロセスがあることを依然として望んでいるため、何も変更しません。

テーブルを作成するには、実行:

<code>[...]
DB_CONNECTION=mysql
DB_HOST=localhost
DB_DATABASE=passwordless-app
DB_USERNAME=username
DB_PASSWORD=
[...]</code>
ログイン後にコピー
ログイン後にコピー

アプリが利用可能になり、ユーザーはナビゲーションバーのリンクを使用して登録およびログインできる必要があります。

ログインリンクの変更

次に、ログインリンクを変更して、ユーザーがパスワードなしでメールアドレスのみを送信するカスタムログインビューにリダイレクトします。

リソース/ビュー/レイアウト/app.blade.phpに移動します。そこには、ナビゲーションバーセクションがあります。ログインリンクを含む行を変更します(ユーザーがログアウトしているかどうかをチェックする条件付きステートメントの下)

リソース/ビュー/レイアウト/app.blade.php

php artisan make:auth
ログイン後にコピー

非合成されていないユーザーが保護されたルートにアクセスしようとする場合、通常のログインビューではなく、新しいカスタムログインビューに移動する必要があります。この動作は、認証ミドルウェアで指定されています。調整する必要があります:

app/http/middleware/authenticate.php

php artisan migrate
ログイン後にコピー

elseブロックでは、通常のログインではなく、リダイレクトをログイン/マジックリンクにポイントに変更したことに注意してください。

マジックログインコントローラー、ビュー、ルートを作成します

次のステップは、AUTHフォルダーにMagicLogincontrollerを作成することです。

[...]
@if (Auth::guest())
<li><a href="https://www.php.cn/link/9964364bfd2b38643a0b41b981c01f60'/login/magiclink') }}">Login</a></li>
<li><a href="https://www.php.cn/link/9964364bfd2b38643a0b41b981c01f60'/register') }}">Register</a></li>
[...]
ログイン後にコピー
それから、カスタムログインページを表示するルートがあります。

app/http/routes.php

MagicLogincontrollerを更新して、ショーアクションを含めてみましょう。
class Authenticate
{
[...]
public function handle($request, Closure $next, $guard = null)
{
    if (Auth::guard($guard)->guest()) {
        if ($request->ajax() || $request->wantsJson()) {
            return response('Unauthorized.', 401);
        } else {
            return redirect()->guest('login/magiclink');
        }
    }

    return $next($request);
}
[...]
ログイン後にコピー

app/http/controllers/auth/magiclogincontroller.php

新しいログインビューの場合、通常のログインビューを借りますが、パスワードフィールドを削除します。また、フォームの投稿URLを変更して

を指​​しました。
php artisan make:controller Auth\MagicLoginController
ログイン後にコピー

この新しいビューを保存するために、Views/Authフォルダーにマジックフォルダーを作成しましょう。 /login/magiclink

新しく作成されたビューを更新してみましょう:

[...]
Route::get('/login/magiclink', 'Auth\MagicLoginController@show');
ログイン後にコピー
リソース/views/auth/magic/login.blade.php

パスワードでログインすることを選択できるため、パスワードでログインするオプションを保持します。したがって、ユーザーがナビゲーションバーのログインをクリックすると、以下に示すようにログインビューが表示されます。

class MagicLoginController extends Controller
{
    [...]
    public function show()
    {
        return view('auth.magic.login');
    }
    [...]
}
ログイン後にコピー

スペースの制限により、残りの部分は完全に拡張できませんが、基本的なアイデアは次のとおりです。

  • トークンを生成および関連付けます:ログインフォームの送信を処理するルートとコントローラーのメソッドを作成し、電子メールアドレスを確認し、ユーザーのトークンを生成し、トークンをユーザーに関連付けます。 str_random()を使用してランダムトークンを生成し、データベースに保存します。
  • トークンメールの送信:Laravelのメール機能を使用してログインリンクを含む電子メールを送信するためのメソッドをUserTokenモデルに追加します。リンクには、トークン、電子メールアドレスを含めて、私の価値を覚えておく必要があります。 Mail::raw()を使用してプレーンテキストメッセージを送信するか、メッセージの外観を強化するメールビューを作成します。
  • トークン検証と認証:ログインリンクのクリックを処理するルートとコントローラーのメソッドを作成します。ルーティングモデルのバインディングを使用してトークンを取得し、トークンが期限切れになり、送信されたメールアドレスに属していることを確認します。 Carbonライブラリを使用して、トークンの有効期限を確認します。検証が成功した後、Auth::login()を使用してユーザーにログインし、使用したトークンを削除します。

上記の手順を通じて、Laravelアプリケーションに安全で信頼性の高いパスワードのないログインシステムを実装し、ユーザーにより便利で安全なログインエクスペリエンスを提供できます。 実際のニーズに応じて、トークンの有効期限とその他の設定を調整することを忘れないでください。 完全なコードとより詳細な手順については、提供した完全なコードリンクを参照してください。

以上がパスワードを殺しましょう!マジックログインリンクは救助にリンクします!の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート