dgild/multi-connector

Laravel中DB和LDAP的身份验证

dev-master 2016-04-20 01:46 UTC

This package is auto-updated.

Last update: 2024-08-29 04:32:18 UTC


README

它使用ADLDAP 5.0库分支Adldap2(https://github.com/Adldap2/Adldap2)来在Laravel和LDAP之间创建桥梁

最初由Sarav编写。由社区采用。

安装

  1. 通过Composer为Laravel v5.1安装此包

    composer require dgild/multi-connector:dev-master
  2. 在打开 config/app.php 并在提供者数组中添加新项目的方式中添加服务提供者到应用程序配置

    ```
    Dgild\MultiConnector\MultiConnectorServiceProvider::class     
    ```
    

    然后你需要注释掉以下行

    Illuminate\Auth\AuthServiceProvider::class
    
  3. 将Laravel配置中的身份验证驱动程序更改为使用ldap驱动程序。您可以在以下文件中找到它 config/auth.php

    'driver' => 'eloquent',

    通过

    'multi' => [
    	'db' => [
    		'driver' => 'eloquent',
    		'model'  => App\User::class,
    		'table'  => 'users'
    	],
        'ldap' => [
    		'driver' => 'ldap',
    		'model'  => Dgild\MultiConnector\Model\User::class,
    		'table'  => 'users'
    	],
    ],
  4. 使用 php artisan vendor:publish 在Laravel的配置文件夹中发布新的配置文件,您将找到 config/ldap.php 并修改为您的需求。有关配置的更多详细信息,您始终可以查看ADLAP文档

    return array(
        'plugins' => array(
            'adldap' => array(
                'account_suffix'=>  '@domain.local',
                'domain_controllers'=>  array(
                    '192.168.0.1',
                    'dc02.domain.local'
                ), // Load balancing domain controllers
                'base_dn'   =>  'DC=domain,DC=local',
                'admin_username' => 'admin', // This is required for session persistance in the application
                'admin_password' => 'yourPassword',
            ),
        ),
    );
    

    请注意,'admin_username' 和 'admin_password' 字段对于会话持久性是必需的!

用法

LDAP插件是Auth类的扩展,将像正常使用Eloquent驱动程序一样运行。

例如,如果您需要使用Eloquent登录

\Auth::attempt('db', $credentials, $request->has('remember'));

或者如果您需要使用Ldap登录

\Auth::attempt('ldap', $credentials, $request->has('remember'));

那么您需要像这样修改 /app/Http/Controllers/Auth/AuthController.php

<?php
namespace App\Http\Controllers\Auth;

use App\User;
use Validator;
use App\Http\Controllers\Controller;
use Dgild\MultiConnector\Foundation\AuthenticatesUsers;

class AuthController extends Controller
{
    use  AuthenticatesUsers;

    /**
     * Create a new authentication controller instance.
     *
     * @return void
     */
    public function __construct()
    {
        $this->username = 'username';
        $this->user = 'db';
        $this->saveUser = true;
        $this->middleware('guest', ['except' => 'getLogout']);
    }

    /**
     * Get a validator for an incoming registration request.
     *
     * @param  array  $data
     * @return \Illuminate\Contracts\Validation\Validator
     */
    protected function validator(array $data)
    {
        return Validator::make($data, [
            'name' => 'required|max:255',
            'email' => 'required|email|max:255|unique:users',
            'password' => 'required|confirmed|min:6',
        ]);
    }

    /**
     * Create a new user instance after a valid registration.
     *
     * @param  array  $data
     * @return User
     */
    protected function create(array $data)
    {
        return User::create([
            'name' => $data['name'],
            'email' => $data['email'],
            'password' => bcrypt($data['password']),
        ]);
    }
}

在构造函数中,以下行非常重要

username属性是登录时使用的字段,您可以用电子邮件或其他数据库字段替换它。

$this->username = 'username';

user属性是连接类型或登录时使用的适配器类型,可以是ldap。

$this->user = 'db';

saveUser属性是一个指示符,表示用户是否只存在于数据库中,但不在数据库中,因此用户已注册到数据库中。

$this->saveUser = true;

注意

来自控制器AuthController.php: https://github.com/laravel/laravel/blob/master/app/Http/Controllers/Auth/AuthController.php

Laravel文档: 身份验证快速入门