cari
Rumahpembangunan bahagian belakangtutorial phplaravle5.4数据验证和用户认证的实现方法

laravle5.4数据验证和用户认证的实现方法

Mar 15, 2018 pm 01:50 PM
penggunaPensijilan


本文主要和大家分享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中

2.1修改config/app.php,在providers项中添加如下代码:

//集成验证码类
    Mews\Captcha\CaptchaServiceProvider::class,

2.2注册别名

修改aliases数组:
将集成的验证码类去个别名,以后就可以像使用Route一样使用门面Captcha
加入如下代码:

'Captcha' => Mews\Captcha\Facades\Captcha::class,

说明:该验证码类也可以配置

①执行命令:
php artisan vendor:publish
②执行完命令后会生成文件config/captcha.php
③配置,如:
return [
    'default'   => [
        'length'    => 5,
        'width'     => 120,
        'height'    => 36,
        'quality'   => 90,
    ],
    // ...
];

3、生成验证码类:

有两种方法可以生成:

  1. 在视图中:Captcha::create();

  2. 在控制器中:Captcha::src();可见:博文

3.1直接在视图中生成

                <img src="{{ captcha_src() }}"> <a id="kanbuq" href="javascript:;">看不清,换一张</a> </p>

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、第二种方式:使用validator门面验证

首先需要引入类:

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()函数将错误信息一次性保存到session中,如果想要在验证错误之后,输入框内的值还保留,可以使用old()函数
如:

10be5ed6329a4ffb113aa07aec1b06e2

5、关于错误信息显示英文

laravel默认情况下显示的错误信息为英文,我们如果想要显示为中文信息,则我们需要下载语言包,地址:中文语言包

5.1、解压后将语言包中的zh-CN复制到resources/lang目录下

5.2、修改config/app.php的local属性, 保证跟lang目录下的文件名一致

'locale' => 'zh-CN'

5.3、自定义添加captcha翻译

因为默认情况下,语言包内没有captcha对应的中文翻译,我们可以自定义,在resources/lang/zh-CN/validation.php文件中的数组attributes选项中添加

 'captcha'               =>'验证码',

5.4、添加添加validation.captcha的翻译

判断验证码是否正确
需要在验证规则中加入captcha, 是第三方的插件提供的规则
这里写图片描述
修改文件如下:
修改文件

用户认证

1.引入Auth门面

//引入auth门面,用户认证
use Illuminate\Support\Facades\Auth;

2编写方法

在login方法中添加如下代码

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表
解决:修改auth配置

1.自定义guard配置

    &#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.配置providers

    &#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;,        // ],
    ],

3.修改ManagerController.php中的login方法

 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 artisan make:model Manager

编写Manager.php模型

<?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;];
}

发现报错
这里写图片描述

解决办法:在模型中实现Auth接口(契约)
引入接口:

use \Illuminate\Auth\Authenticatable;

在类的内部使用use关键字: 包含trait, 实现了契约

<?phpnamespace App;use Illuminate\Database\Eloquent\Model;class Manager extends Model implements \Illuminate\Contracts\Auth\Authenticatable{
    //使用auth模块下的Authenticatable实现Contracts\Auththenticatable
    //查看这个类,发现这个类是trait 类型,就可以在类内使用use + 类名,从而可以使用这个类的方法
    use \Illuminate\Auth\Authenticatable;    //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;];
}

注意:说明:如果在认证成功之后,在返回登入页面验证码无法正常显storage\framework\sessions下的session文件删除

相关推荐:

php实现各数据验证的实例分析

php表单数据验证类,php表单验证_PHP教程

PHP代码实现表单数据验证类_php实例

Atas ialah kandungan terperinci laravle5.4数据验证和用户认证的实现方法. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
PHP: Pengenalan kepada bahasa skrip sisi pelayanPHP: Pengenalan kepada bahasa skrip sisi pelayanApr 16, 2025 am 12:18 AM

PHP adalah bahasa skrip sisi pelayan yang digunakan untuk pembangunan web dinamik dan aplikasi sisi pelayan. 1.Php adalah bahasa yang ditafsirkan yang tidak memerlukan kompilasi dan sesuai untuk perkembangan pesat. 2. Kod PHP tertanam dalam HTML, menjadikannya mudah untuk membangunkan laman web. 3. PHP memproses logik sisi pelayan, menghasilkan output HTML, dan menyokong interaksi pengguna dan pemprosesan data. 4. PHP boleh berinteraksi dengan pangkalan data, penyerahan borang proses, dan melaksanakan tugas-tugas sampingan pelayan.

PHP dan Web: Meneroka kesan jangka panjangnyaPHP dan Web: Meneroka kesan jangka panjangnyaApr 16, 2025 am 12:17 AM

PHP telah membentuk rangkaian sejak beberapa dekad yang lalu dan akan terus memainkan peranan penting dalam pembangunan web. 1) PHP berasal pada tahun 1994 dan telah menjadi pilihan pertama bagi pemaju kerana kemudahan penggunaannya dan integrasi lancar dengan MySQL. 2) Fungsi terasnya termasuk menghasilkan kandungan dinamik dan mengintegrasikan dengan pangkalan data, yang membolehkan laman web dikemas kini secara real time dan dipaparkan secara peribadi. 3) Aplikasi dan ekosistem PHP yang luas telah mendorong kesan jangka panjangnya, tetapi ia juga menghadapi kemas kini versi dan cabaran keselamatan. 4) Penambahbaikan prestasi dalam beberapa tahun kebelakangan ini, seperti pembebasan Php7, membolehkannya bersaing dengan bahasa moden. 5) Pada masa akan datang, PHP perlu menangani cabaran baru seperti kontena dan microservices, tetapi fleksibiliti dan komuniti aktif menjadikannya boleh disesuaikan.

Mengapa menggunakan PHP? Kelebihan dan faedah dijelaskanMengapa menggunakan PHP? Kelebihan dan faedah dijelaskanApr 16, 2025 am 12:16 AM

Manfaat utama PHP termasuk kemudahan pembelajaran, sokongan pembangunan web yang kukuh, perpustakaan dan kerangka yang kaya, prestasi tinggi dan skalabilitas, keserasian silang platform, dan keberkesanan kos. 1) mudah dipelajari dan digunakan, sesuai untuk pemula; 2) integrasi yang baik dengan pelayan web dan menyokong pelbagai pangkalan data; 3) mempunyai rangka kerja yang kuat seperti Laravel; 4) Prestasi tinggi dapat dicapai melalui pengoptimuman; 5) menyokong pelbagai sistem operasi; 6) Sumber terbuka untuk mengurangkan kos pembangunan.

Debunking the Myths: Adakah PHP benar -benar bahasa yang mati?Debunking the Myths: Adakah PHP benar -benar bahasa yang mati?Apr 16, 2025 am 12:15 AM

PHP tidak mati. 1) Komuniti PHP secara aktif menyelesaikan masalah prestasi dan keselamatan, dan Php7.x meningkatkan prestasi. 2) PHP sesuai untuk pembangunan web moden dan digunakan secara meluas di laman web besar. 3) PHP mudah dipelajari dan pelayan berfungsi dengan baik, tetapi sistem jenis tidak begitu ketat sebagai bahasa statik. 4) PHP masih penting dalam bidang pengurusan kandungan dan e-dagang, dan ekosistem terus berkembang. 5) Mengoptimumkan prestasi melalui OPCACHE dan APC, dan gunakan corak OOP dan reka bentuk untuk meningkatkan kualiti kod.

Perbahasan PHP vs Python: Mana yang lebih baik?Perbahasan PHP vs Python: Mana yang lebih baik?Apr 16, 2025 am 12:03 AM

PHP dan Python mempunyai kelebihan dan kekurangan mereka sendiri, dan pilihannya bergantung kepada keperluan projek. 1) PHP sesuai untuk pembangunan web, mudah dipelajari, sumber komuniti yang kaya, tetapi sintaks tidak cukup moden, dan prestasi dan keselamatan perlu diberi perhatian. 2) Python sesuai untuk sains data dan pembelajaran mesin, dengan sintaks ringkas dan mudah dipelajari, tetapi terdapat kesesakan dalam kelajuan pelaksanaan dan pengurusan memori.

Tujuan PHP: Membina Laman Web DinamikTujuan PHP: Membina Laman Web DinamikApr 15, 2025 am 12:18 AM

PHP digunakan untuk membina laman web dinamik, dan fungsi terasnya termasuk: 1. Menjana kandungan dinamik dan menghasilkan laman web secara real time dengan menyambung dengan pangkalan data; 2. Proses Interaksi Pengguna dan Penyerahan Bentuk, Sahkan Input dan Menanggapi Operasi; 3. Menguruskan sesi dan pengesahan pengguna untuk memberikan pengalaman yang diperibadikan; 4. Mengoptimumkan prestasi dan ikuti amalan terbaik untuk meningkatkan kecekapan dan keselamatan laman web.

PHP: Pengendalian pangkalan data dan logik sisi pelayanPHP: Pengendalian pangkalan data dan logik sisi pelayanApr 15, 2025 am 12:15 AM

PHP menggunakan sambungan MySQLI dan PDO untuk berinteraksi dalam operasi pangkalan data dan pemprosesan logik sisi pelayan, dan memproses logik sisi pelayan melalui fungsi seperti pengurusan sesi. 1) Gunakan MySQLI atau PDO untuk menyambung ke pangkalan data dan laksanakan pertanyaan SQL. 2) Mengendalikan permintaan HTTP dan status pengguna melalui pengurusan sesi dan fungsi lain. 3) Gunakan urus niaga untuk memastikan atomik operasi pangkalan data. 4) Mencegah suntikan SQL, gunakan pengendalian pengecualian dan sambungan penutup untuk debugging. 5) Mengoptimumkan prestasi melalui pengindeksan dan cache, tulis kod yang sangat mudah dibaca dan lakukan pengendalian ralat.

Bagaimana anda menghalang suntikan SQL di PHP? (Penyataan yang disediakan, PDO)Bagaimana anda menghalang suntikan SQL di PHP? (Penyataan yang disediakan, PDO)Apr 15, 2025 am 12:15 AM

Menggunakan penyataan preprocessing dan PDO dalam PHP secara berkesan dapat mencegah serangan suntikan SQL. 1) Gunakan PDO untuk menyambung ke pangkalan data dan tetapkan mod ralat. 2) Buat kenyataan pra -proses melalui kaedah menyediakan dan lulus data menggunakan ruang letak dan laksanakan kaedah. 3) Hasil pertanyaan proses dan pastikan keselamatan dan prestasi kod.

See all articles

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
4 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
4 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
4 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Arahan sembang dan cara menggunakannya
4 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌

Alat panas

Penyesuai Pelayan SAP NetWeaver untuk Eclipse

Penyesuai Pelayan SAP NetWeaver untuk Eclipse

Integrasikan Eclipse dengan pelayan aplikasi SAP NetWeaver.

mPDF

mPDF

mPDF ialah perpustakaan PHP yang boleh menjana fail PDF daripada HTML yang dikodkan UTF-8. Pengarang asal, Ian Back, menulis mPDF untuk mengeluarkan fail PDF "dengan cepat" dari tapak webnya dan mengendalikan bahasa yang berbeza. Ia lebih perlahan dan menghasilkan fail yang lebih besar apabila menggunakan fon Unicode daripada skrip asal seperti HTML2FPDF, tetapi menyokong gaya CSS dsb. dan mempunyai banyak peningkatan. Menyokong hampir semua bahasa, termasuk RTL (Arab dan Ibrani) dan CJK (Cina, Jepun dan Korea). Menyokong elemen peringkat blok bersarang (seperti P, DIV),

Dreamweaver Mac版

Dreamweaver Mac版

Alat pembangunan web visual

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

Persekitaran pembangunan bersepadu PHP yang berkuasa

MinGW - GNU Minimalis untuk Windows

MinGW - GNU Minimalis untuk Windows

Projek ini dalam proses untuk dipindahkan ke osdn.net/projects/mingw, anda boleh terus mengikuti kami di sana. MinGW: Port Windows asli bagi GNU Compiler Collection (GCC), perpustakaan import yang boleh diedarkan secara bebas dan fail pengepala untuk membina aplikasi Windows asli termasuk sambungan kepada masa jalan MSVC untuk menyokong fungsi C99. Semua perisian MinGW boleh dijalankan pada platform Windows 64-bit.