gpt4 book ai didi

authentication - 使用2个不同的表进行身份验证

转载 作者:行者123 更新时间:2023-12-03 08:21:05 25 4
gpt4 key购买 nike

我需要使用另一个表和用户创建一个新的“auth”配置。我为“admin”用户提供了一个表,为普通用户提供了另一个表。

但是,如何使用不同的配置创建另一个Auth实例?

最佳答案

您可以“模拟”新的Auth类。

Laravel Auth组件基本上是Illuminate\Auth\Guard类,并且该类具有一些依赖性。

因此,基本上,您必须创建一个新的Guard类和一些外墙...

<?php 
use Illuminate\Auth\Guard as AuthGuard;

class CilentGuard extends AuthGuard
{

public function getName()
{
return 'login_' . md5('ClientAuth');
}

public function getRecallerName()
{
return 'remember_' . md5('ClientAuth');
}
}

...添加 ServiceProvider初始化此类,并传递其依赖项。
<?php 

use Illuminate\Support\ServiceProvider;
use Illuminate\Auth\EloquentUserProvider;
use Illuminate\Hashing\BcryptHasher;
use Illuminate\Auth\Reminders\PasswordBroker;
use Illuminate\Auth\Reminders\DatabaseReminderRepository;
use ClientGuard;
use ClientAuth;

class ClientServiceProvider extends ServiceProvider
{

public function register()
{
$this->registerAuth();
$this->registerReminders();
}

protected function registerAuth()
{
$this->registerClientCrypt();
$this->registerClientProvider();
$this->registerClientGuard();
}

protected function registerClientCrypt()
{
$this->app['client.auth.crypt'] = $this->app->share(function($app)
{
return new BcryptHasher;
});
}

protected function registerClientProvider()
{
$this->app['client.auth.provider'] = $this->app->share(function($app)
{
return new EloquentUserProvider(
$app['client.auth.crypt'],
'Client'
);
});
}

protected function registerClientGuard()
{
$this->app['client.auth'] = $this->app->share(function($app)
{
$guard = new Guard(
$app['client.auth.provider'],
$app['session.store']
);

$guard->setCookieJar($app['cookie']);
return $guard;
});
}

protected function registerReminders()
{
# DatabaseReminderRepository
$this->registerReminderDatabaseRepository();

# PasswordBroker
$this->app['client.reminder'] = $this->app->share(function($app)
{
return new PasswordBroker(
$app['client.reminder.repository'],
$app['client.auth.provider'],
$app['redirect'],
$app['mailer'],
'emails.client.reminder' // email template for the reminder
);
});
}

protected function registerReminderDatabaseRepository()
{
$this->app['client.reminder.repository'] = $this->app->share(function($app)
{
$connection = $app['db']->connection();
$table = 'client_reminders';
$key = $app['config']['app.key'];

return new DatabaseReminderRepository($connection, $table, $key);
});
}

public function provides()
{
return array(
'client.auth',
'client.auth.provider',
'client.auth.crypt',
'client.reminder.repository',
'client.reminder',
);
}
}

在该服务提供者中,我举了一些示例,说明如何创建"new"密码提醒组件。

现在,您需要创建两个新的外观,一个用于身份验证,另一个用于密码提醒。
<?php 
use Illuminate\Support\Facades\Facade;

class ClientAuth extends Facade
{

protected static function getFacadeAccessor()
{
return 'client.auth';
}
}

和...
<?php 
use Illuminate\Support\Facades\Facade;

class ClientPassword extends Facade
{

protected static function getFacadeAccessor()
{
return 'client.reminder';
}
}

当然,对于密码提示,您需要在数据库中创建表才能正常工作。在此示例中,表名称应为 client_reminders,如在服务提供者的 registerReminderDatabaseRepository方法中所见。该表的结构与原始提醒表相同。

之后,您可以像使用 ClientAuth类一样使用 Auth。对于 ClientPassword类和 Password类,也是如此。
ClientAuth::gust();
ClientAuth::attempt(array('email' => $email, 'password' => $password));

ClientPassword::remind($credentials);

不要忘记将您的服务提供商添加到 app/config/app.php文件中的服务提供商列表中。

更新:

如果您使用的是Laravel 4.1,则PasswordBroker不再需要 Redirect类。
return new PasswordBroker(
$app['client.reminder.repository'],
$app['client.auth.provider'],
$app['mailer'],
'emails.client.reminder' // email template for the reminder
);

更新2

Laravel 5.2刚刚引入了 multi auth,因此在此版本中不再需要。

关于authentication - 使用2个不同的表进行身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18785754/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com