ホームページ > バックエンド開発 > PHPチュートリアル > laravle5.4におけるデータバリデーションとユーザー認証の実装方法

laravle5.4におけるデータバリデーションとユーザー認証の実装方法

小云云
リリース: 2023-03-21 14:08:02
オリジナル
1178 人が閲覧しました


この記事では主にlaravle5.4のデータ検証とユーザー認証の実装方法を紹介し、皆様のお役に立てれば幸いです。

1. ルートを計画する

//登入模块
Route::match(['get','post'],'/admin/login','Admin\ManagerController@login');
ログイン後にコピー

2. コントローラーに対応するメソッドを記述する

php artisan make:controller Admin\ManagerController
ログイン後にコピー

検証コード関数パッケージをインストールする

: 検証コード関数パッケージ

使用コマンド:

public function Login(Request $request){    if($request->isMethod('get')){        //显示视图
        return view('Admin.login');
    }elseif($request->isMethod(''post)){        //数据处理
        //1.数据验证(用户名长度是否合法)
        //2.用户认证(用户名和密码在数据库中是否存在)
    }
}
ログイン後にコピー

注: エラーが発生する場合は、PHP拡張機能php_fileinfoがオンになっているか確認してください


2. 検証コード関数パッケージをlaravelに登録

2.1 config/app.phpを修正し、プロバイダー項目に次のコードを追加します:

composer require mews/captcha
ログイン後にコピー

2.2 エイリアスを登録します

エイリアス配列を変更します:

統合検証コード クラスのエイリアスを削除すると、将来的には Route のようにファサード キャプチャを使用できるようになります

次のコードを追加します:

//集成验证码类
    Mews\Captcha\CaptchaServiceProvider::class,
ログイン後にコピー

注: この検証コード クラスは構成することもできます

①コマンドを実行します:

'Captcha' => Mews\Captcha\Facades\Captcha::class,
ログイン後にコピー

②コマンドの実行後、ファイル config/captcha.php が生成されます

③次のような構成:
php artisan vendor:publish
ログイン後にコピー
3.検証コードクラスを生成します:
生成するには 2 つのメソッドがあります:

ビュー内: Captcha::create();

  1. コントローラー内: Captcha::src();

  2. 3.1 ビューで直接生成
  3. return [
        'default'   => [
            'length'    => 5,
            'width'     => 120,
            'height'    => 36,
            'quality'   => 90,
        ],
        // ...
    ];
    ログイン後にコピー

    4. データ検証

  4. 4.1 最初の方法
                <img  src="{{ captcha_src() }}" alt="laravle5.4におけるデータバリデーションとユーザー認証の実装方法" > <a id="kanbuq" href="javascript:;">看不清,换一张</a> </p>
ログイン後にコピー

4.2、2番目の方法: バリデータファサード検証を使用する

まずクラスを導入する必要があります:

 public function login(Request $request)
{
    if($request->isMethod(&#39;get&#39;)){
        //显示数据
        return view(&#39;Admin.login&#39;);
    }elseif($request->isMethod(&#39;post&#39;)){
        //数据处理
        //1.数据验证(用户名长度,是否为空)
        /*
         *参数一:$request对象【接收的数据】
         * 参数二:验证规则
         * */
        //第一种方式:
           $this->validate($request,[
           &#39;username&#39;=>&#39;required|min:2|max:16&#39;,
            &#39;password&#39;=>&#39;required|between:4,20&#39;,
            &#39;captcha&#39;=>&#39;required|size:5|captcha&#39;,//这里的captcha规则是继承的验证码插件自带的
        ]);
        echo "验证通过";
            }
}
ログイン後にコピー

エラーを表示するテンプレート内のメッセージ:

use Validator;

 public function login(Request $request)
    {
        if($request->isMethod(&#39;get&#39;)){
            //显示数据
            return view(&#39;Admin.login&#39;);
        }elseif($request->isMethod(&#39;post&#39;)){
            //数据处理
            //1.数据验证(用户名长度,是否为空)
            /*
             *参数一:$request对象【接收的数据】
             * 参数二:验证规则
             * */
           //第二种方式:
            $validator = Validator::make($request->all(),[
               &#39;username&#39;=>&#39;required|min:2|max:16&#39;,
                &#39;password&#39;=>&#39;required|between:4,20&#39;,
                &#39;captcha&#39;=>&#39;required|size:5|captcha&#39;,
            ]);
            if($validator->fails()){
                return redirect(&#39;/admin/login&#39;)//验证失败后跳转地址
                        ->withErrors($validator)//将错误信息一次性保存到session中
                        ->withInput();//保留原来输入的值
            }
            echo "验证通过";
                    }
    }
ログイン後にコピー

** 注: withErrors() 関数は情報を一度にセッションに保存するため、検証エラーの後に入力ボックスの値を保持したい場合は、 old() 関数

例:

@if (count($errors) > 0)        <p class="alert alert-danger">
            <ul>
                @foreach ($errors->all() as $error)                    <li>{{ $error }}</li>
                @endforeach            </ul>
        </p>
    @endif
ログイン後にコピー

5. 英語でのエラーメッセージ表示について

laravel はデフォルトで表示されますが、中国語情報として表示したい場合は、言語をダウンロードする必要があります。アドレス: 中国語言語パック


5.1. 解凍後、言語パック内の zh-CN を resource/lang ディレクトリにコピーします

5.2. config/app.php のローカル属性を変更して、 lang ディレクトリのファイル名

<input id="username" name="username" value="{{ old(&#39;username&#39;) }}" type="text" placeholder="账户" class="input-text size-L">
ログイン後にコピー

5.3. キャプチャ翻訳をカスタマイズして追加します

デフォルトでは言語パッケージにキャプチャに対応する中国語翻訳がないため、カスタマイズして配列

attributes

&#39;locale&#39; => &#39;zh-CN&#39;
ログイン後にコピー

5.4を追加できます。 resource/lang/zh-CN/validation.php ファイルのオプションで、検証コードが正しいかどうかを判断するために validation.captcha

の翻訳を追加します

検証ルールにキャプチャを追加することは、提供されるルールですサードパーティのプラグインを使用して

次のようにファイルを変更します:

ユーザー認証laravle5.4におけるデータバリデーションとユーザー認証の実装方法
1. Auth ファサードを導入します

 &#39;captcha&#39;               =>&#39;验证码&#39;,
ログイン後にコピー
laravle5.4におけるデータバリデーションとユーザー認証の実装方法2 書き方

ログインメソッドに次のコードを追加します

//引入auth门面,用户认证
use Illuminate\Support\Facades\Auth;
ログイン後にコピー

エラーが見つかりました:

原因: SQL クエリは it_users テーブルです


解決策: 認証構成を変更しますlaravle5.4におけるデータバリデーションとユーザー認証の実装方法

1. プロバイダーを構成します

public function login(Request $request)
    {
        if($request->isMethod(&#39;get&#39;)){            //显示数据
            return view(&#39;Admin.login&#39;);
        }elseif($request->isMethod(&#39;post&#39;)){            //数据处理
            //1.数据验证(用户名长度,是否为空)
            /*
             *参数一:$request对象【接收的数据】
             * 参数二:验证规则
             * */

           //第二种方式:
            $validator = Validator::make($request->all(),[               &#39;username&#39;=>&#39;required|min:2|max:16&#39;,                &#39;password&#39;=>&#39;required|between:4,20&#39;,                &#39;captcha&#39;=>&#39;required|size:5|captcha&#39;,
            ]);            if($validator->fails()){                return redirect(&#39;/admin/login&#39;)
                        ->withErrors($validator)//将错误信息一次性保存到session中
                        ->withInput();//保留原来输入的值
            }            //2.用户认证(用户名与密码在数据库中是否能查询到)
            $username  =$request->input(&#39;username&#39;);            $password = $request->input(&#39;password&#39;);            if(Auth::guard(&#39;admin&#39;)->attempt([&#39;username&#39;=>$username,&#39;password&#39;=>$password])){                echo "认证成功";                //记录认证状态
            }else{                echo "认证失败";                //跳转到登入页面
            }

        }
    }
ログイン後にコピー
2. ManagerController を変更します。 .php内
    &#39;guards&#39; => [        &#39;web&#39; => [          
      &#39;driver&#39; => &#39;session&#39;,            &#39;provider&#39; => &#39;users&#39;,
        ],        &#39;api&#39; => [            &#39;driver&#39; => &#39;token&#39;,           
         &#39;provider&#39; => &#39;users&#39;,
        ],        &#39;admin&#39; =>[            &#39;driver&#39; => &#39;session&#39;,          
          &#39;provider&#39; => &#39;admin&#39;,
          //报错信息,我们加入这样一个数组,对应下面的provider的配置
        ],
    ],
ログイン後にコピー
Managerモデルを作成します

コマンドを実行します:

    &#39;providers&#39; => [        &#39;users&#39; => [           
     &#39;driver&#39; => &#39;eloquent&#39;,            &#39;model&#39; => App\User::class,
        ],        &#39;admin&#39; => [            
        &#39;driver&#39; => &#39;eloquent&#39;,           
         &#39;model&#39; => App\Manager::class,//建立的模型是与这里的Manager名称一致
        ],      
          // &#39;users&#39; => [       
           //     &#39;driver&#39; => &#39;database&#39;,      
             //     &#39;table&#39; => &#39;users&#39;,        // ],
    ],
ログイン後にコピー

Manager.phpモデルを書き込みます

 public function login(Request $request)
    {
        if($request->isMethod(&#39;get&#39;)){            //显示数据
            return view(&#39;Admin.login&#39;);
        }elseif($request->isMethod(&#39;post&#39;)){            //数据处理
            //1.数据验证(用户名长度,是否为空)
            /*
             *参数一:$request对象【接收的数据】
             * 参数二:验证规则
             * */
            //第一种方式:
           /* $this->validate($request,[
               &#39;username&#39;=>&#39;required|min:2|max:16&#39;,
                &#39;password&#39;=>&#39;required|between:4,20&#39;,
                &#39;captcha&#39;=>&#39;required|size:5|captcha&#39;,//这里的captcha规则是继承的验证码插件自带的
            ]);*/
           //第二种方式:
            $validator = Validator::make($request->all(),[               &#39;username&#39;=>&#39;required|min:2|max:16&#39;,                &#39;password&#39;=>&#39;required|between:4,20&#39;,                &#39;captcha&#39;=>&#39;required|size:5|captcha&#39;,
            ]);            if($validator->fails()){                return redirect(&#39;/admin/login&#39;)
                        ->withErrors($validator)//将错误信息一次性保存到session中
                        ->withInput();//保留原来输入的值
            }            //2.用户认证(用户名与密码在数据库中是否能查询到)
            $username  =$request->input(&#39;username&#39;);            $password = $request->input(&#39;password&#39;);            //使用自定义的guard【admin】
            if(Auth::guard(&#39;admin&#39;)->attempt([&#39;username&#39;=>$username,&#39;password&#39;=>$password])){               return redirect(&#39;/admin/index&#39;);                //记录认证状态
            }else{                echo "认证失败";                //跳转到登入页面
                return redirect(&#39;/admin/login&#39;)
                    ->withErrors([&#39;loginError&#39;=>&#39;用户名或密码错误&#39;])
                    ->withInput();
            }

        }
    }
ログイン後にコピー

エラーが見つかりました

解決策:

モデルにAuthインターフェース(コントラクト)を実装します

導入インターフェース:

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

クラス内で use キーワードを使用します: トレイトを含み、コントラクトを実装します

<?phpnamespace App;use Illuminate\Database\Eloquent\Model;class Manager extends Model{

    //3.定义属性:代表软删除的字段
    protected $data = [&#39;deleted_at&#39;];    protected $table = "manager";    protected  $primaryKey = "mg_id";    protected $fillable = [&#39;username&#39;,&#39;password&#39;,&#39;mg_role_ids&#39;,&#39;mg_sex&#39;,&#39;mg_phone&#39;,&#39;mg_email&#39;,&#39;mg_remark&#39;];
}
ログイン後にコピー
laravle5.4におけるデータバリデーションとユーザー認証の実装方法注: 注: 認証成功後、ログイン ページに戻ったときに確認コードが正常に表示されない場合は、セッションを削除してくださいstorageframeworksessions の下のファイル


関連する推奨事項:

さまざまなデータ検証を実装する php のインスタンス分析

php フォーム データ検証クラス、php フォーム検証_PHP チュートリアル

フォーム データ検証クラスを実装する PHP コード_php例

以上がlaravle5.4におけるデータバリデーションとユーザー認証の実装方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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