パスワードのトラブルに別れを告げ、安全で便利なパスワードのないログインを受け入れましょう!この記事では、セキュリティを改善し、ユーザーエクスペリエンスを簡素化するために、Laravelアプリケーションで1回限りのリンクベースのパスワードフリーログインシステムを実装する方法を紹介します。
この記事は、Younes RafieとWern Anchetaによってレビューされました。 SetePointのすべてのピアレビューアーズに感謝します。
アイデンティティ認証テクノロジーは、従来のメールボックスパスワードの組み合わせからソーシャルログイン、今日のパスワードレスログイン(より正確には「電子メールのみの」ログイン)まで進化し続けています。パスワードレスログインシステムは、ユーザーのメールにログインリンクを送信することによりIDを検証します。
パスワードのないログインプロセスは次のとおりです
データベース設定
composer create-project laravel/laravel passwordless-laravel 5.2.*
移行を実行する前に、MySQLデータベースをセットアップする必要があります。
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> [...]
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');
パスワードでログインすることを選択できるため、パスワードでログインするオプションを保持します。したがって、ユーザーがナビゲーションバーのログインをクリックすると、以下に示すようにログインビューが表示されます。
class MagicLoginController extends Controller { [...] public function show() { return view('auth.magic.login'); } [...] }
スペースの制限により、残りの部分は完全に拡張できませんが、基本的なアイデアは次のとおりです。
str_random()
を使用してランダムトークンを生成し、データベースに保存します。 UserToken
モデルに追加します。リンクには、トークン、電子メールアドレスを含めて、私の価値を覚えておく必要があります。 Mail::raw()
を使用してプレーンテキストメッセージを送信するか、メッセージの外観を強化するメールビューを作成します。 Carbon
ライブラリを使用して、トークンの有効期限を確認します。検証が成功した後、Auth::login()
を使用してユーザーにログインし、使用したトークンを削除します。 上記の手順を通じて、Laravelアプリケーションに安全で信頼性の高いパスワードのないログインシステムを実装し、ユーザーにより便利で安全なログインエクスペリエンスを提供できます。 実際のニーズに応じて、トークンの有効期限とその他の設定を調整することを忘れないでください。 完全なコードとより詳細な手順については、提供した完全なコードリンクを参照してください。
以上がパスワードを殺しましょう!マジックログインリンクは救助にリンクします!の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。