本篇文章介绍Laravel框架自定义验证过程的分析。 首先,你需要明白一点,当你开启auth中间件的时候,其实是调用了在app/Http/Kernel.php中的 auth = \Illuminate\Auth\Middleware\Authenticate::class, 但是这里先不用去纠结这个文件,这里直接看开启这个验
本篇文章介绍Laravel框架自定义验证过程的分析。 首先,你需要明白一点,当你开启auth中间件的时候,其实是调用了在app/Http/Kernel.php中的
但是这里先不用去纠结这个文件,这里直接看开启这个验证之后会怎样。首先,如果你去访问开启这个验证的控制器,但是你又没有登录的话,那么会默认去搜索login路由,所以你需要在路由中设置该路由:
而且虽然 name('login') 可设可不设,但是最好加上。接着页面就会跳转到你设置的供用户填写表单的页面,该表单的提交路由你也一样要设置好:
其实由于这里已经由我们可控了,即,我们可以手动确定表单提交到哪个控制器以及对应该控制器下的方法,所以接下来的问题就是如何使Laravel知道我们确定该用户已经通过了验证了。 这个时候可以使用 Auth::attempt() 函数,这个函数的作用原理是将你传递进去的数组,比如下面:
下面是重点!!!
Auth::attempt() 会将你提交过来的值,做password_hash($post_password,'PASSWORD_BCRYPT') 处理,然后跟数据库中的存储值进行比较,相等则验证通过,不相等,则自然验证失败。验证通过后,使用 Auth::login(Auth::user()); 就可以完成用户的登录验证了。这里再穿插一个知识点,当你使用Eloquent作为数据库驱动时,你需要新建一个用户类,User.php,你可以使用命令行来新建该模型,也可以直接手动新建,但是注意,命令行新建的该模型是存在问题的, Auth::attempt() 中会去尝试调用该模型,但是其中调用的类类型不是Model!!!所以你自以为新建好了User.php后,发现会报以下错误:
你只要把User.php模型修改成下面的形式就对了:
|
2019-06-28
2019-10-03
2019-07-04
2019-06-22
2019-02-12