ホームページ >バックエンド開発 >PHPチュートリアル >Laravel5.4での複数フィールドログインの実装方法について

Laravel5.4での複数フィールドログインの実装方法について

不言
不言オリジナル
2018-06-13 16:36:521041ブラウズ

この記事ではLaravel5.4でのマルチフィールドログインの実装方法を中心に紹介していますので、参考にしてください。要件の 1 つは、マルチフィールド ログインの効果を実現することです。つまり、携帯電話または電子メールの任意の方法を使用してログインできるようになります。ここで解決プロセスを共有するので、この記事では主に の実装について紹介します。 Laravel5.4に基づいたマルチフィールドログイン。必要な方は以下の機能に関する情報を参照してください。

まえがき最近、プロジェクトに複数フィールドのログイン機能を実装する必要がありました。簡単に言うと、ユーザー名を使用できます。 、電子メールまたは携帯電話のいずれかの方法でログインします。したがって、この記事では、Laravel5.4 マルチフィールドログインに関する関連コンテンツを紹介し、参考と学習のために共有します。早速、詳細な紹介を見てみましょう。

#以下の内容はlaravel5.4をベースにしています

#メソッドは次のとおりです。 #まず、artisan ツールを使用します。 Generate auth modulephp army make:auth

この時点で、Auth ディレクトリが App\Http\Controllers に追加されますコントローラでは、resources\views ディレクトリも登録とログインに関連するビューを生成します。

laravel の公式ドキュメントには、ユーザーの手動認証には試行メソッドが必要であると記載されています。 <pre class="brush:php;toolbar:false">&lt;?php namespace App\Http\Controllers; use Illuminate\Support\Facades\Auth; class LoginController extends Controller { /** * Handle an authentication attempt. * * @return Response */ public function authenticate() { if (Auth::attempt([&amp;#39;email&amp;#39; =&gt; $email, &amp;#39;password&amp;#39; =&gt; $password])) { // Authentication passed... return redirect()-&gt;intended(&amp;#39;dashboard&amp;#39;); } } }</pre>このメソッドは、渡されたパラメータに基づいてデータベース内に一致するユーザーがあるかどうかを判断します。ユーザーが存在し、パスワードが正しい場合は、の場合は true を返します。それ以外の場合は false を返します。

次に、LoginController メソッドにユーザーを追加しますが、効果はないようです。

そこで、LoginController の実装メカニズムを観察し始めて、次のことがわかりました。このトレイトの定義ファイルを追跡したところ、このファイルが必要なものであることがわかりました。

このファイルには、ログイン ロジックの処理を担当するログイン メソッドがあります。

/**
  * Handle a login request to the application.
  *
  * @param \Illuminate\Http\Request $request
  * @return \Illuminate\Http\RedirectResponse|\Illuminate\Http\Response
  */
 public function login(Request $request)
 {
  // 表单验证
  $this->validateLogin($request);

  // If the class is using the ThrottlesLogins trait, we can automatically throttle
  // the login attempts for this application. We&#39;ll key this by the username and
  // the IP address of the client making these requests into this application.
  // 防止暴力破解,多次登录失败会根据IP锁定
  if ($this->hasTooManyLoginAttempts($request)) {
   $this->fireLockoutEvent($request);

   return $this->sendLockoutResponse($request);
  }
  
  // 这个就是主要的负责判断数据库中是否存在相应的账号和密码的地方,我们需要重写的就是attemptLogin方法
  if ($this->attemptLogin($request)) {
   return $this->sendLoginResponse($request);
  }

  // If the login attempt was unsuccessful we will increment the number of attempts
  // to login and redirect the user back to the login form. Of course, when this
  // user surpasses their maximum number of attempts they will get locked out.
  // 登录失败,失败次数++,防止暴力破解
  $this->incrementLoginAttempts($request);

  // 返回失败响应
  return $this->sendFailedLoginResponse($request);
 }

このファイルの wave を分析した結果、ログインを決定する主なメソッドは、attemptLogin メソッドであることがわかりました。まず、このメソッドがどのように記述されているかを見てみましょう。元の内容に従って書き換えます:

/**
  * Attempt to log the user into the application.
  *
  * @param \Illuminate\Http\Request $request
  * @return bool
  */
 protected function attemptLogin(Request $request)
 {
  return $this->guard()->attempt(
   $this->credentials($request), $request->has(&#39;remember&#39;)
  );
 }

LoginController を書き換えた後:

public function attemptLogin(Request $request)
 {
  $username = $request->input(&#39;username&#39;);
  $password = $request->input(&#39;password&#39;);

  // 验证用户名登录方式
  $usernameLogin = $this->guard()->attempt(
   [&#39;username&#39; => $username, &#39;password&#39; => $password], $request->has(&#39;remember&#39;)
  );
  if ($usernameLogin) {
   return true;
  }

  // 验证手机号登录方式
  $mobileLogin = $this->guard()->attempt(
   [&#39;mobile&#39; => $username, &#39;password&#39; => $password], $request->has(&#39;remember&#39;)
  );
  if ($mobileLogin) {
   return true;
  }

  // 验证邮箱登录方式
  $emailLogin = $this->guard()->attempt(
   [&#39;email&#39; => $username, &#39;password&#39; => $password], $request->has(&#39;remember&#39;)
  );
  if ($emailLogin) {
   return true;
  }

  return false;
 }

成功した限り、attempt メソッドを使用して複数の判定を行います。失敗した場合は true を返します。 、引き続き他のフィールドを使用して判断します。失敗した場合は、複数フィールドのログイン効果を実現できる fle

Test が返されます。

以上がこの記事の全内容です。皆さんの学習に役立つことを願っています。関連コンテンツについては、PHP 中国語 Web サイトに注目してください。

関連する推奨事項:

Laravel を使用して SMS 登録を実装する方法

Laravel を使用してスケジュールされたタスクを実装する方法

#

以上がLaravel5.4での複数フィールドログインの実装方法についての詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。