Laravelのユーザー認証

予備的

「警備員」と「プロバイダ」組成によって設定/ auth.php、Laravelの認証コンポーネントに位置Laravel権限の設定ファイルは、
Guardは、ユーザのステータスはセッション経由でログイン維持します。プロバイダは、ログインページへのアクセス時間とユーザ情報へのアクセスです。この章のショーでは、ユーザ情報を取得するために、プロバイダをカスタマイズする方法について話。

設定/ auth.phpファイル

Laravelは2つのガード、ウェブやAPIを提供し、デフォルトのWeb認証を取ります。ウェブの警備員、プロバイダーとユーザー。その後、私たちは新しいプロバイダに変更する必要があり、サービスプロバイダをカスタマイズし、注意を払う必要があります。まず、プロバイダを使用するように新しいドライブを定義します。

 'providers' => [
     'users' => [
           'driver' => 'Focus',  //名称自定义,这里为Focus
           'model' => App\Models\User::class,  //Model放在Models文件夹下
      ],
],

注:プロバイダはDatabaseUserProviderとEloquentUserProviderあり、どちらもデフォルトのデータベースと雄弁2つの駆動を提供しています、laravelである\ Authの下の枠組み\ SRC \を照らし\フォルダには、私たちのカスタムフォーカスプロバイダをUserProviderを実現しましたまたUserProviderを実現します。

ルートビューの生成

php artisan make:auth  //命令可快速生成认证所需要的路由和视图

それに応じて下のHttp /コントローラとリソースの制御ビューを生成/ビュー
デフォルトではメールでは、我々はユーザー名を使用します

LoginController:
//このメソッドを追加するには、ユーザー名を返します。

public function username(){
    return 'username';
}

login.blade.php:
メールボックスではなく、電子メールのユーザー名、ドメインアカウントに変更されました

データベース

データベース情報.env設定を変更します。

php artisan make:model Models/User  // 使用命令创建User模型

デフォルトでは、モデルのユーザーに継承され、あなたは変更する必要があります。

use Illuminate\Foundation\Auth\User as Authenticatable;  //引入Authenticatable
class User extends Authenticatable
{
    protected $table      = 'employee';
        protected $primaryKey = 'employee_id';

         //can set all fields to user model
        protected $guarded = [];
}

認証可能が点灯\契約が認証\認証可能インターフェースを\、およびFocusUserProviderは、インタフェースの実装を使用する必要が実現するので、なぜ、認証可能それを紹介します。

拡張の作成

UserProviderを達成するための新しい拡張機能/ FocusUserProviderファイル、およびアプリケーションの基準DatabaseUserProvider EloquentUserProvider、:

namespace App\Extensions;

use App\Services\LdapValidator;
use Illuminate\Support\Str;
use Illuminate\Contracts\Auth\UserProvider;
use \Illuminate\Contracts\Auth\Authenticatable;
    
class LaravelUserProvider implements UserProvider {

    protected $model;

    public function __construct($model)
    {
           $this->model = $model;
    } 
   
   //登录成功后,通过此方法获取用户信息,返回匹配该ID的 Authenticatable 实现
    public function retrieveById($identifier) {
       
      //此处可以将信息放入缓存,缓解数据库压力。
        $model = $this->createModel();
        return $model->newQuery()
            ->where($model->getAuthIdentifierName(), $identifier)
            ->first();
    }

    public function retrieveByToken($identifier, $token) {
    }
    public function updateRememberToken(Authenticatable $user, $token) {
    }

    //该方法可以根据账号名去查询数据库是否存在匹配的账号
    public function retrieveByCredentials(array $credentials) {  

        if (empty($credentials)) {
            return;
        }

        // First we will add each credential element to the query as a where clause.
        // Then we can execute the query and, if we found a user, return it in a
        // Eloquent User "model" that will be utilized by the Guard instances.
        $query = $this->createModel()->newQuery();

         foreach ($credentials as $key => $value) {
            if (! Str::contains($key, 'password')) {
                $query->where($key, $value);
            }
        }

        return $query->first();     
    }
  
   //该方法可以验证密码是否正确,因为我们是ldap登录,可以在此验证域账号
    public function validateCredentials(Authenticatable $user, array $credentials) {
       
      //LdapValidator类是为了验证域密码的,放在了app/Services,在上面已经引入
        $Ldap  = new LdapValidator($user->username, $credentials['password']);
        
        return $Ldap->validatePassword();
    }

    /**
     * Create a new instance of the model.
     *
     * @return \Illuminate\Database\Eloquent\Model
     */
    public function createModel()
    {
        $class = '\\'.ltrim($this->model, '\\');

        return new $class;
    }

}

登録プロバイダ

LaravelはAuthServiceProviderを提供し、我々はここに登録することができます。

public function boot()
{
        $this->registerPolicies();
       
       //Focus为auth.php里面定义的驱动
        Auth::provider('Focus', function($app, array $config){

             return new FocusUserProvider ($config['model']);
        });
} 

ここでは、HTTPを訪問することができます://ドメイン名/ログインログインシステムを

おすすめ

転載: www.cnblogs.com/SexyPhoenix/p/11769959.html