Laravel框架自定义验证过程实例分析

 更新时间:2019年02月01日 11:35:25   作者:trouble-i-am-in  
这篇文章主要介绍了Laravel框架自定义验证过程,结合实例形式分析了Laravel框架自定义验证的相关原理、路由、模型等操作技巧,需要的朋友可以参考下

本文实例讲述了Laravel框架自定义验证过程。分享给大家供大家参考,具体如下:

首先,你需要明白一点,当你开启auth中间件的时候,其实是调用了在app/Http/Kernel.php中的

'auth' => \Illuminate\Auth\Middleware\Authenticate::class,

但是这里先不用去纠结这个文件,这里直接看开启这个验证之后会怎样。首先,如果你去访问开启这个验证的控制器,但是你又没有登录的话,那么会默认去搜索login路由,所以你需要在路由中设置该路由:

Route::get('login','AnyControllerName@AnyFunctionName')->name('login');

而且虽然name('login')可设可不设,但是最好加上。接着页面就会跳转到你设置的供用户填写表单的页面,该表单的提交路由你也一样要设置好:

Route::post('login','AnyControllerName@AnyFunctionName');

其实由于这里已经由我们可控了,即,我们可以手动确定表单提交到哪个控制器以及对应该控制器下的方法,所以接下来的问题就是如何使Laravel知道我们确定该用户已经通过了验证了。

这个时候可以使用Auth::attempt()函数,这个函数的作用原理是将你传递进去的数组,比如下面:

public function checkLogin(Request $request){
  $user_name=$request->user_name;
  $user_id=$request->user_id;
  $password=$request->password;
  Auth::attempt([
    'user_name'=>$user_name,
    'user_id'=>$user_id,
    'password'=>$password
  ]);
}

下面是重点!!!

其中,我们使用了3个参数$user_name$user_id$password,attempt会把除了$password之外的内容作为$where的内容,从数据库中搜索记录,如果记录为0,那么当然不用说了,验证失败,但是存在该记录时,就需要去匹配$password是否正确。

laravel保存$password的方式是使用PHP的函数password_hash,该函数能计算传入值的哈希值,而且该函数需要第二个参数,指定哈希处理的方式,Laravel中该参数名为PASSWORD_BCRYPT,Laravel会将密码经过该函数处理后再保存。(至于如何做到的,暂时没有机会深究。)

假设你的密码为123456,那么你保存在数据库中的值就是

password_hash('123456','PASSWORD_BCRYPT')

Auth::attempt()会将你提交过来的值,做password_hash($post_password,'PASSWORD_BCRYPT')处理,然后跟数据库中的存储值进行比较,相等则验证通过,不相等,则自然验证失败。

验证通过后,使用Auth::login(Auth::user());就可以完成用户的登录验证了。

这里再穿插一个知识点,当你使用Eloquent作为数据库驱动时,你需要新建一个用户类,User.php,你可以使用命令行来新建该模型,也可以直接手动新建,但是注意,命令行新建的该模型是存在问题的,Auth::attempt()中会去尝试调用该模型,但是其中调用的类类型不是Model!!!所以你自以为新建好了User.php后,发现会报以下错误:

Argument 1 passed to
Illuminate\Auth\EloquentUserProvider::validateCredentials()
must be an instance of
Illuminate\Contracts\Auth\Authenticatable,
instance of
App\User
given, called in /var/www/sample/vendor/laravel/framework/src/Illuminate/Auth/SessionGuard.php on line 379 and defined

简单来说就是你传递的参数错误了,以下是错误演示:

namespace App\Model;
use Illuminate\Database\Eloquent\Model;
class User extends Model
{
}

你只要把User.php模型修改成下面的形式就对了:

<?php
namespace App;
use Illuminate\Auth\Authenticatable;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Auth\Passwords\CanResetPassword;
use Illuminate\Contracts\Auth\Authenticatable as AuthenticatableContract;
use Illuminate\Contracts\Auth\CanResetPassword as CanResetPasswordContract;
use Illuminate\Database\Eloquent\SoftDeletes;
class User extends Model implements AuthenticatableContract
{
  use Authenticatable, CanResetPassword;
  // 这个参数是关于软删除的,如果你有软删除需要,那么你可以加上
  // use SoftDeletes;
}

更多关于Laravel相关内容感兴趣的读者可查看本站专题:《Laravel框架入门与进阶教程》、《php优秀开发框架总结》、《php面向对象程序设计入门教程》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总

希望本文所述对大家基于Laravel框架的PHP程序设计有所帮助。

相关文章

  • 一个简单安全的PHP验证码类、PHP验证码

    一个简单安全的PHP验证码类、PHP验证码

    这篇文章主要介绍了一个简单安全的PHP验证码类 PHP验证码的相关资料,需要的朋友可以参考下
    2016-09-09
  • 在php的yii2框架中整合hbase库的方法

    在php的yii2框架中整合hbase库的方法

    这篇文章主要介绍了在php的yii2框架中整合hbase库的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-09-09
  • wordpress自定义url参数实现路由功能的代码示例

    wordpress自定义url参数实现路由功能的代码示例

    这篇文章主要介绍了wordpress中实现路由功能的代码示例,大家可以参考用代码实现自己的路由功能
    2013-11-11
  • django中的ajax组件教程详解

    django中的ajax组件教程详解

    Ajax(Asynchronous Javascript And XML)翻译成英文就是“异步Javascript和XML”。这篇文章主要介绍了django中的ajax组件的教程 ,需要的朋友可以参考下
    2018-10-10
  • phpstudy本地环境搭建超详细图文教程

    phpstudy本地环境搭建超详细图文教程

    这篇文章主要给大家介绍了关于phpstudy本地环境搭建超详细图文教程的相关资料,phpStudy是集安全、高效、功能于一体且完全免费的一键服务器环境搭建软件,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2023-07-07
  • PHP利用百度ai实现文本和图片审核

    PHP利用百度ai实现文本和图片审核

    这篇文章主要介绍了PHP利用百度ai实现文本和图片审核,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-05-05
  • php生成唯一uid的解决方法详解

    php生成唯一uid的解决方法详解

    在用户系统中,生成唯一uid,是很多初级程序员头痛的事情,因为你并不能保证完全的唯一性,如果要保证唯一性,必须要查一次数据库。本文将介绍php生成唯一uid的思路,希望能对大家有所帮助
    2021-11-11
  • Yii框架防止sql注入,xss攻击与csrf攻击的方法

    Yii框架防止sql注入,xss攻击与csrf攻击的方法

    这篇文章主要介绍了Yii框架防止sql注入,xss攻击与csrf攻击的方法,结合实例形式分析了Yii框架针对sql注入,xss攻击与csrf攻击的防范方法与相关函数调用注意事项,需要的朋友可以参考下
    2016-10-10
  • PHP与Ajax相结合实现登录验证小Demo

    PHP与Ajax相结合实现登录验证小Demo

    AJAX即“Asynchronous Javascript And XML”(异步JavaScript和XML),是指一种创建交互式网页应用的网页开发技术。接下来通过本文给大家分享PHP与Ajax相结合实现登录验证小Demo,对php ajax实现登录验证相关知识感兴趣的朋友一起学习吧
    2016-03-03
  • php生成二维码不保存服务器还有下载功能的实现代码

    php生成二维码不保存服务器还有下载功能的实现代码

    这篇文章主要介绍了php生成二维码不保存服务器还有下载功能的实现代码,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2018-08-08

最新评论