laravle5.4의 데이터 검증 및 사용자 인증 구현 방법

小云云
풀어 주다: 2023-03-21 14:08:02
원래의
1170명이 탐색했습니다.


이 기사에서는 모든 사람에게 도움이 되기를 바라며 laravle5.4 데이터 확인 및 사용자 인증 구현 방법을 주로 공유합니다.

1. 경로 계획

//登入模块
Route::match(['get','post'],'/admin/login','Admin\ManagerController@login');
로그인 후 복사

2. 컨트롤러 생성

php artisan make:controller Admin\ManagerController
로그인 후 복사

3. 컨트롤러에 해당하는 메소드 작성

public function Login(Request $request){    if($request->isMethod('get')){        //显示视图
        return view('Admin.login');
    }elseif($request->isMethod(''post)){        //数据处理
        //1.数据验证(用户名长度是否合法)
        //2.用户认证(用户名和密码在数据库中是否存在)
    }
}
로그인 후 복사

인증 코드 클래스 통합

1. 함수 패키지 주소 : 인증코드 기능 패키지

사용 명령어:

composer require mews/captcha
로그인 후 복사

참고: 오류가 발생하면 PHP 확장 php_fileinfo가 켜져 있는지 확인하세요

2. 인증 코드 기능 패키지를 laravel

에 등록하세요. config/app.php를 수정하고 공급자 항목에 다음 코드를 추가합니다.

//集成验证码类
    Mews\Captcha\CaptchaServiceProvider::class,
로그인 후 복사

2.2 별칭 등록

별칭 배열 수정:

통합 인증 코드 클래스의 별칭을 제거하고 향후 Route와 같은 Facade Captcha를 사용할 수 있습니다.

다음 코드 추가 :

'Captcha' => Mews\Captcha\Facades\Captcha::class,
로그인 후 복사

참고: 이 확인 코드 클래스도 구성할 수 있습니다.

1명령 실행:

php artisan vendor:publish
로그인 후 복사
2명령을 실행한 후 config/captcha.php 파일이 생성됩니다
3구성, 예:
return [
    'default'   => [
        'length'    => 5,
        'width'     => 120,
        'height'    => 36,
        'quality'   => 90,
    ],
    // ...
];
로그인 후 복사
3. 확인 코드 클래스 생성:

생성하는 방법에는 두 가지가 있습니다.

    보기에서: Captcha::create();
  1. 컨트롤러에서: Captcha::src();
  2. 3.1 뷰에서 직접 생성

                    <img  src="{{ captcha_src() }}" alt="laravle5.4의 데이터 검증 및 사용자 인증 구현 방법" > <a id="kanbuq" href="javascript:;">看不清,换一张</a> </p>
    로그인 후 복사
  3. 4. 데이터 검증

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对象【接收的数据】
         * 参数二:验证规则
         * */
        //第一种方式:
           $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 "验证通过";
            }
}
로그인 후 복사

4.2 두 번째 방법: 유효성 검사기 외관 검증 사용

먼저 클래스를 소개해야 합니다.

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 "验证通过";
                    }
    }
로그인 후 복사

오류를 표시합니다. 템플릿의 메시지:

@if (count($errors) > 0)        <p class="alert alert-danger">
            <ul>
                @foreach ($errors->all() as $error)                    <li>{{ $error }}</li>
                @endforeach            </ul>
        </p>
    @endif
로그인 후 복사

**참고: withErrors() 함수는 정보가 한 번에 세션에 저장되기 때문에 확인 오류 후에도 입력 상자의 값을 유지하려면 다음을 사용할 수 있습니다. old() 함수

예:

<input id="username" name="username" value="{{ old(&#39;username&#39;) }}" type="text" placeholder="账户" class="input-text size-L">
로그인 후 복사

5. 영어로 표시되는 오류 메시지에 대해서는


laravel이 기본적으로 표시합니다. 오류 메시지를 중국어 정보로 표시하려면 언어를 다운로드해야 합니다. pack.주소: 중국어 언어 팩

5.1. 압축을 푼 후 언어 팩의 zh-CN을 resources/lang 디렉토리에 복사하세요

5.2. lang 디렉토리의 파일 이름

&#39;locale&#39; => &#39;zh-CN&#39;
로그인 후 복사

5.3. 보안 문자 번역 사용자 정의 및 추가

기본적으로 언어 패키지에는 보안 문자에 해당하는 중국어 번역이 없으므로 사용자 정의할 수 있으며 배열

속성

 &#39;captcha&#39;               =>&#39;验证码&#39;,
로그인 후 복사

5.4를 추가할 수 있습니다. resources/lang/zh-CN/validation.php 파일의 옵션에 유효성 검사.captcha

의 번역을 추가하여 인증 코드가 올바른지 확인하세요

필요합니다. 인증 규칙에 보안 문자를 추가하는 것이 제공되는 규칙입니다. 타사 플러그인
파일을 다음과 같이 수정하세요.
laravle5.4의 데이터 검증 및 사용자 인증 구현 방법
사용자 인증
laravle5.4의 데이터 검증 및 사용자 인증 구현 방법1. 인증 외관을 도입하세요

//引入auth门面,用户认证
use Illuminate\Support\Facades\Auth;
로그인 후 복사

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对象【接收的数据】
             * 参数二:验证规则
             * */

           //第二种方式:
            $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 "认证失败";                //跳转到登入页面
            }

        }
    }
로그인 후 복사

오류 발견:


원인: SQL 쿼리가 it_users 테이블입니다laravle5.4의 데이터 검증 및 사용자 인증 구현 방법

해결책: 인증 구성 수정
1. 보호 구성 사용자 정의

    &#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的配置
        ],
    ],
로그인 후 복사
2. ManagerController 수정. .php에서

    &#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 모델 만들기

명령 실행:

 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();
            }

        }
    }
로그인 후 복사

Manager.php 모델 작성

php artisan make:model Manager
로그인 후 복사

오류 발견

해결책:

모델에 인증 인터페이스(계약) 구현


소개 인터페이스: laravle5.4의 데이터 검증 및 사용자 인증 구현 방법

<?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;];
}
로그인 후 복사

클래스 내에서 use 키워드 사용: 특성 포함, 계약 구현

use \Illuminate\Auth\Authenticatable;
로그인 후 복사
참고: 참고: 인증 성공 후 로그인 페이지로 돌아갈 때 인증 코드가 정상적으로 표시되지 않으면 세션을 삭제하세요.

관련 권장사항:

다양한 데이터 검증을 구현하는 PHP의 인스턴스 분석

php 양식 데이터 검증 클래스, php 양식 검증_PHP 튜토리얼양식 데이터 검증을 구현하는 PHP 코드 class_php 예

위 내용은 laravle5.4의 데이터 검증 및 사용자 인증 구현 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿