【Laravel】ADアカウントでログインできるようにする
検証時のバージョン
OS:Amazon Linux 2
Apahe:2.4
MariaDB:5.5.64
PHP:7.3
Laravel:7.27.0
Adldap2-laravel:6.1.1
プロジェクト作成
sudo chown ec2-user:ec2-user /var/www/html cd /var/www/html composer create-project laravel/laravel [project-name] --prefer-dist
プロジェクトフォルダ内のパーミッション変更
※Laravelが普通に動くパーミッションであれば、なんでもよいです。
参考:CentOS/Apache/Laravel使用時のpermission設定方法 - Qiita
データベース作成
mysql -u root -p create database laravel; exit;
DB接続情報の追加
・.env
DB_DATABASE=laravel DB_USERNAME=root DB_PASSWORD=設定したパスワード
Laravelプロジェクトの日本語化
・config/app.php
'timezone' => 'Asia/Tokyo', 'locale' => 'ja',
DBマイグレーションエラー対策
※MariaDBのバージョンが新しい場合は不要
・app/Providers/AppServiceProvider.php
use Illuminate\Support\Facades\Schema; ←追加 ・・・ public function boot() { Schema::defaultStringLength(191); ←追加 }
マイグレーションファイルの編集
・database/migrations/2014_10_12_000000_create_users_table.php
$table->id(); $table->string('name'); + $table->string('username')->unique(); - $table->string('email')->unique(); + $table->string('email')->nullable(); - $table->timestamp('email_verified_at')->nullable(); $table->string('password'); $table->rememberToken(); $table->timestamps();
・database/migrations/2014_10_12_100000_create_password_resets_table.php は削除する
マイグレーション実行
php artisan migrate
nodejsインストール
php artisan migrate curl -sL https://rpm.nodesource.com/setup_12.x | sudo bash - sudo yum install -y nodejs npm -v
ログイン機能導入
composer require laravel/ui
php artisan ui vue --auth
npm install
npm run dev
PHP-LDAPの導入
sudo yum install -y php-ldap
sudo vi /etc/php.ini
以下を追記する
extension=ldap.so
PHPを再起動する
sudo systemctl restart php-fpm
Adldap2の導入
composer require adldap2/adldap2-laravel
・config/app.php
'providers' => [ ・・・ + Adldap\Laravel\AdldapServiceProvider::class, + Adldap\Laravel\AdldapAuthServiceProvider::class, ], 'aliases' => [ ・・・ + 'Adldap' => Adldap\Laravel\Facades\Adldap::class, ],
Adldap2設定ファイルのパブリッシュ
php artisan vendor:publish --provider "Adldap\Laravel\AdldapServiceProvider" php artisan vendor:publish --provider="Adldap\Laravel\AdldapAuthServiceProvider"
ldapサーバの接続設定
・config/ldap.php
'account_suffix' => env('LDAP_ACCOUNT_SUFFIX', '@example.co.jp'), 'hosts' => explode(' ', env('LDAP_HOSTS', dc1.example.co.jp dc2.example.co.jp')), 'base_dn' => env('LDAP_BASE_DN', 'dc=example,dc=co,dc=jp'), 'username' => env('LDAP_USERNAME', 'example\ldap-admin'), 'password' => env('LDAP_PASSWORD', 'password'),
※ユーザ作成/パスワード変更を実装する場合は以下も設定
'use_tls' => env('LDAP_USE_TLS', true),
ログイン周りの修正
・app/Http/Controllers/Auth/LoginController.php
class LoginController extends Controller { ・・・ + public function username() + { + return 'username'; + } }
・config/auth.php
'providers' => [ 'users' => [ - 'driver' => 'eloquent', + 'driver' => 'ldap',
・resources/views/auth/login.blade.php
変更前
<div class="form-group row"> <label for="email" class="col-md-4 col-form-label text-md-right">{{ __('E-Mail Address') }}</label> <div class="col-md-6"> <input id="email" type="email" class="form-control @error('email') is-invalid @enderror" name="email" value="{{ old('email') }}" required autocomplete="email" autofocus> @error('email')
変更後
<div class="form-group row"> <label for="username" class="col-md-4 col-form-label text-md-right">Username</label> <div class="col-md-6"> <input id="username" type="username" class="form-control @error('username') is-invalid @enderror" name="username" value="{{ old('username') }}" required autocomplete="username" autofocus> @error('username')
・config/ldap_auth.php
※以下を編集
'ldap' => [ 'locate_users_by' => 'samaccountname', 'bind_users_by' => 'samaccountname', ], 'database' => [ 'guid_column' => 'email', 'username_column' => 'username', ], 'sync_attributes' => [ 'email' => 'mail', + 'username' => 'samaccountname', 'name' => 'cn', ],
ルート編集
・routes/web.php
Auth::routes();
↑を
Auth::routes([ 'reset' => false, 'verify' => false, 'register' => false, ]);
↑に変更する
Welcomeページから「Registerボタン」が、
Loginページから「パスワード忘れリンク」が消える。