検索
ホームページバックエンド開発PHPチュートリアルLaravel5.4に複数フィールドログイン機能を実装する
Laravel5.4に複数フィールドログイン機能を実装するMay 18, 2018 pm 03:20 PM
laravel5.4関数ログイン

最近、仕事でマルチフィールドログインの効果の 1 つである、携帯電話または電子メールの任意の方法を使用してログインできるようにする必要があるという問題に遭遇しました。そのため、これを解決するプロセスを共有します。この記事では、Laravel5.4 でのマルチフィールド ログイン機能の実装に関する関連情報を参照してください。

はじめに

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

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

方法は以下の通りです

まず、artisanツールを通じてauthモジュールを生成します

php artisan make:auth

このとき、Authディレクトリが登録とログインに関連するコントローラーである AppHttpControllers ディレクトリに追加されると、登録とログインに関連する一部のビューも resourceviews ディレクトリに生成されます

Laravel の公式ドキュメントには、ユーザーの手動認証には、 IlluminateSupportFacadesAuth クラスは次のようになります。

<?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([&#39;email&#39; => $email, &#39;password&#39; => $password])) {
   // Authentication passed...
   return redirect()->intended(&#39;dashboard&#39;);
  }
 }
}

このメソッドは、渡した内容に基づいて行われます。入力されたパラメーターによって、データベース内に一致するユーザーが存在するかどうかが決まり、そのユーザーが存在し、パスワードが正しい場合は true を返し、それ以外の場合は false を返します。次に、このメソッドを LoginController に追加しましたが、効果がないようだったので、 LoginController の実装メカニズムを観察し始め、それが AuthenticatesUsers のトレイトを実装していることを発見し、このトレイトの定義ファイルを追跡しました。これが私たちが望むものです

その中にはログインロジックの処理を担当するログインメソッドがあります

/**
  * 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);
 }

このファイルのウェーブを分析したところ、ログイン判定の主なメソッドは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 を返します。成功しなかった場合は引き続き他のフィールドを使用して判定し、複数フィールドのログイン効果を得ることができます。

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

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

随着互联网的发展,人们越来越依赖网络,大部分时间都在使用各种各样的网站和应用程序,这也使得我们需要记住很多账号和密码。为了方便用户的使用,很多网站提供了自动登录功能,让用户免除频繁输入账号和密码的烦恼。本文将介绍使用JavaScript实现自动登录功能的方法。一、登录流程分析在开始实现自动登录功能之前,我们需要了解整个登录流程。一般情况下,一个网站的登录流程

如何使用PHP实现天气预报功能如何使用PHP实现天气预报功能Jun 27, 2023 pm 05:54 PM

PHP作为一款流行的后端编程语言,在Web开发领域广受欢迎。天气预报功能是一种常见的Web应用场景,基于PHP实现天气预报功能相对简单易懂。本文将介绍如何使用PHP实现天气预报功能。一、获取天气数据API要实现天气预报功能,首先需要获取天气数据。我们可以使用第三方天气API来获取实时、准确的天气数据。目前,国内主流的天气API供应商包括免费的“心知天气”和收

如何使用 Windows Copilot 与剪贴板一起展开、解释、总结或修改复制的文本如何使用 Windows Copilot 与剪贴板一起展开、解释、总结或修改复制的文本Jul 29, 2023 am 08:41 AM

在Copilot目前在Windows11上拥有的少数功能中,也许最有用的功能是允许您交互和调整已复制到剪贴板的文本的功能。这使得将Copilot用作文本编辑和摘要工具变得容易,您可以直接从桌面使用。以下是您需要了解的有关使用Copilot在Windows上解释、修订、扩展和汇总文本的所有信息。如何在WindowsCopilot中使用复制的文本Copilot的预览版让我们第一次很好地了解了Windows对原生AI支持的集成。修改或扩展从其他地方复制的文本的早期功能之一可以通过内容创建、摘要、修订和

未来功能抢先用 Safari 技术预览 173 版本释出未来功能抢先用 Safari 技术预览 173 版本释出Jul 02, 2023 pm 01:37 PM

Apple今日释出了Safari技术预览173版本,涵盖部分可能于Safari17推出的功能。该版本适用于macOSSonoma测试版以及macOSVentura系统,有兴趣的用户可于官方网页下载。Safari技术预览173版于设定中新增了功能标志区块,取代原先开发菜单的实验功能。该区块可让开发者快速地搜索特定功能,并以不同形式将「稳定」、「可供测试」、「预览」或「开发人员」等状态标示出来。重新设计的开发菜单可以帮助创作者更容易找到关键工具,以便建立网页、网页应用程序、其他应用程序中的网页内容、

如何在iPhone上扫描QR码如何在iPhone上扫描QR码Jul 20, 2023 am 09:13 AM

Apple在设备中内置了这个方便的功能,可以从iPhone上的相机轻松访问它,这将允许您自动扫描设备上的QR码。二维码代表快速响应码,本质上是一种二维条形码,可以通过配备内置摄像头的各种智能手机和其他电子设备轻松扫描和解释。扫描二维码后,用户通常会被定向到特定网站或提示激活应用程序中的特定功能。这种令人难以置信的方便功能在现代智能手机(包括Apple的iPhone)中变得越来越普遍,它是用户以最小的努力访问信息,服务或功能的便捷方式。许多公司在实体产品上使用此功能,您可以扫描其产品上的二维码,然

鸿蒙OS3.0的功能有什么?鸿蒙OS3.0的功能有什么?Jun 29, 2023 pm 10:53 PM

鸿蒙os3.0目前正在测试阶段,很快用户就将迎来新的系统体验了,那么相较于2.0版本,鸿蒙os3.0有什么功能呢?华为鸿蒙3.0包含了多屏协同、性能共享等功能,用户可以获得更加完善的协同体验,同时也能提升手机运行大型游戏或软件的流畅度。另外,它简化了小窗交互方式,并改进通知栏,带给你更为完美的体验,接下来就让小编给大家分析一下华为鸿蒙3.0新功能介绍,一起来了解一下吧。华为鸿蒙3.0功能介绍1、多屏协同:此前鸿蒙2.0可以在电脑手机之间互相切换使用,提高了用户的工作效率和使用体验,但此次的鸿蒙3

iOS 17更新了什么功能?iOS 17更新了什么功能?Jun 06, 2023 am 08:22 AM

Apple今日正式发表iOS17,针对电话、FaceTime、讯息等方面作出了改善,让用户得以用不同以往的方式来与他人互动。透过iOS17,用户还能够全新的「NameDrop」功能来与朋友分享自己的资讯,只要使用者将装置贴近对方装置即可。Apple还将推出《日记》App,适合用来记录统整你想要保存的信息,例如照片、位置、活动、音乐等等,App甚至能够为你提供写作范例,让记录更加简单直截,该app预计将于今年稍晚于iOS推出。升級至iOS17後,當使用者將裝置橫放時,還能夠將iPhone當作時鐘使

Google Colab将很快使用Codey进行AI编码Google Colab将很快使用Codey进行AI编码Jun 09, 2023 am 10:43 AM

GoogleColab是一个自2017年以来一直在促进Python编程的平台,它将利用Google的高级代码模型Codey引入AI编码功能。Codey基于PaLM2模型构建,对来自外部来源的大型高质量代码数据集进行了精心微调,以提高其在编码任务方面的性能。Colab即将推出的功能包括代码补全、自然语言到代码生成以及代码辅助聊天机器人。最初的重点将放在代码生成上,该功能旨在使用户能够生成更大的代码块并从注释或提示编写整个函数。这旨在减少编写重复代码的需求,允许用户专注于编程和数据科学的更复杂的方面

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

PhpStorm Mac バージョン

PhpStorm Mac バージョン

最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

AtomエディタMac版ダウンロード

AtomエディタMac版ダウンロード

最も人気のあるオープンソースエディター

mPDF

mPDF

mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

Dreamweaver Mac版

Dreamweaver Mac版

ビジュアル Web 開発ツール