Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/262.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 不了解如何制作自定义身份验证驱动程序。最终我们需要肥皂。_Php_Authentication_Laravel 5.1 - Fatal编程技术网

Php 不了解如何制作自定义身份验证驱动程序。最终我们需要肥皂。

Php 不了解如何制作自定义身份验证驱动程序。最终我们需要肥皂。,php,authentication,laravel-5.1,Php,Authentication,Laravel 5.1,我对拉雷维尔很陌生,我真的需要一些帮助。我需要为我的工作创建一个简单的应用程序,我想我不会有这个问题,因为这里的教程非常优秀 我遇到的问题是,对于该项目,我需要使用SOAP web服务对外部数据库中的用户进行身份验证,如果本地数据库中不存在该用户,我将创建该用户并将其登录。我能够管理这个部分,因为我已经编写了一个Joomla插件来实现这一点 我试图找出有关如何创建自定义驱动程序的文档。我原以为,在修改之前,我会先复制EloquentUserProvider,因此我创建了: ErsAuthServ

我对拉雷维尔很陌生,我真的需要一些帮助。我需要为我的工作创建一个简单的应用程序,我想我不会有这个问题,因为这里的教程非常优秀

我遇到的问题是,对于该项目,我需要使用SOAP web服务对外部数据库中的用户进行身份验证,如果本地数据库中不存在该用户,我将创建该用户并将其登录。我能够管理这个部分,因为我已经编写了一个Joomla插件来实现这一点

我试图找出有关如何创建自定义驱动程序的文档。我原以为,在修改之前,我会先复制EloquentUserProvider,因此我创建了:

ErsAuthServiceProvider
ErsUserProvider
分别放在
App\Providers
App\Extensions

但它神秘地不起作用。。。我得到以下错误:

ErrorException in ErsUserProvider.php line 33: Argument 1 passed to App\Extensions\ErsUserProvider::__construct() must be an instance of Illuminate\Contracts\Hashing\Hasher, none given, called in /home/vagrant/Code/ERSTools/app/Providers/ErsAuthServiceProvider.php on line 31 and defined
实际上,在文档中,我不太了解他们对示例中的
boot()
方法做了什么。我知道他们扩展了
Auth
类以添加新的驱动程序(在我的例子中是ers),但我不明白他们为什么要传递
$app['riak.connection']

<?php

namespace App\Providers;

use Auth;
use App\Extensions\ErsUserProvider;
use Illuminate\Contracts\Auth\Access\Gate as GateContract;
use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider;

    class ErsAuthServiceProvider extends ServiceProvider

    {

        protected $policies = [
        'App\Model' => 'App\Policies\ModelPolicy',
    ];


    /**
     * Register any application authentication / authorization services.
     *
     * @param  \Illuminate\Contracts\Auth\Access\Gate  $gate
     * @return void
     */
    public function boot(GateContract $gate)
    {
        parent::registerPolicies($gate);

         Auth::extend('ers', function($app) {
            // Return an instance of Illuminate\Contracts\Auth\UserProvider...
            return new ErsUserProvider;
        });

        //
    }

    /**
     * Register the application services.
     *
     * @return void
     */
    public function register()
    {
        //
    }
}

我汗流浃背,但第一部分我做得很好。问题出在引导方法中。我的自定义提供程序是原始laravel 5.1的工作副本,我现在可以自定义它

以下是有效的服务提供商:

<?php

namespace App\Providers;

use App\Extensions\ErsUserProvider;
use Illuminate\Support\ServiceProvider;
use Illuminate\Contracts\Auth\UserProvider;

class ErsAuthServiceProvider extends ServiceProvider

{
 /**
     * Bootstrap the application services.
     *
     * @return void
     */
    public function boot()
    {

        $this->app['auth']->extend('ers',function($app)
        {
            $model = $app['config']['auth.model'];
            return new ErsUserProvider($app['hash'], $model);
        });
    }

    /**
     * Register the application services.
     *
     * @return void
     */
    public function register()
    {
        //
    }
}

<?php

namespace App\Providers;

use App\Extensions\ErsUserProvider;
use Illuminate\Support\ServiceProvider;
use Illuminate\Contracts\Auth\UserProvider;

class ErsAuthServiceProvider extends ServiceProvider

{
 /**
     * Bootstrap the application services.
     *
     * @return void
     */
    public function boot()
    {

        $this->app['auth']->extend('ers',function($app)
        {
            $model = $app['config']['auth.model'];
            return new ErsUserProvider($app['hash'], $model);
        });
    }

    /**
     * Register the application services.
     *
     * @return void
     */
    public function register()
    {
        //
    }
}