予備的
「警備員」と「プロバイダ」組成によって設定/ 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を訪問することができます://ドメイン名/ログインログインシステムを