【记录 撸一个博客系统】11.登陆注册-看看laravel自带的鉴权 源码分析

浅析

入口

【记录 撸一个博客系统】11.登陆注册-看看laravel自带的鉴权 源码分析_第1张图片

Model

 'datetime',
    ];
}

Illuminate\Foundation\Auth\User

namespace Illuminate\Foundation\Auth;

use Illuminate\Auth\Authenticatable;
use Illuminate\Auth\MustVerifyEmail;
use Illuminate\Auth\Passwords\CanResetPassword;
use Illuminate\Contracts\Auth\Access\Authorizable as AuthorizableContract;
use Illuminate\Contracts\Auth\Authenticatable as AuthenticatableContract;
use Illuminate\Contracts\Auth\CanResetPassword as CanResetPasswordContract;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Foundation\Auth\Access\Authorizable;

class User extends Model implements
    AuthenticatableContract,
    AuthorizableContract,
    CanResetPasswordContract
{
    use Authenticatable, Authorizable, CanResetPassword, MustVerifyEmail;
}
//这里引用了4个类

不具体跳进去了,大致看下

  • Authenticatable, 规范了一些认证系统必须给出的方法。
  • Authorizable,规范了一些可以做和不可做的规范,要求模型中必须提供。
  • CanResetPassword, 规范了一些为了忘记密码必须给出的方法。
  • MustVerifyEmail;规范了一些为了邮箱认证必须给出的方法。

简单地说,都是规范,为了组件式开发做铺垫,给出规范,只要你按照规范开发,你的认证组件就可以完美在框架运行。(面向接口编程)

【记录 撸一个博客系统】11.登陆注册-看看laravel自带的鉴权 源码分析_第2张图片

监听

 [
            SendEmailVerificationNotification::class,
        ],
    ];

    /**
     * Register any events for your application.
     *
     * @return void
     */
    public function boot()
    {
        parent::boot();

        //
    }
}

然后在vendor\laravel\framework\src\Illuminate\Auth\SessionGuard.php
添加了一系列监听

   /**
     * Register an authentication attempt event listener.
     *
     * @param  mixed  $callback
     * @return void
     */
    public function attempting($callback)
    {
        if (isset($this->events)) {
            $this->events->listen(Events\Attempting::class, $callback);
        }
    }

先写到这里,后面有更深刻的理解再补充。

你可能感兴趣的:(PHP)