sboo/multiauth

此包已被弃用,不再维护。作者建议使用kbwebs/multiauth包。

Laravel 5的多个认证驱动

v4.0.9 2015-06-16 14:13 UTC

This package is not auto-updated.

Last update: 2022-02-01 12:45:56 UTC


README

请前往https://github.com/Kbwebs/MultiAuth作为替代。kbwebs的分支与Laravel 5.1完全兼容。从我的分支迁移到这个版本不需要对您的代码进行任何更改。

Laravel Multi Auth

有关Laravel 4.2版本,请参阅https://github.com/ollieread/multiauth

重要:Laravel 5.1 默认AuthController及其特性和行为

\Illuminate\Foundation\Auth\AuthenticatesAndRegistersUsers

更具体地说

Illuminate\Foundation\Auth\AuthenticatesUsers::postLogin()

不工作!目前,您需要自己编写Controller。如果有时间,我会处理这个问题。

此包不是laravels默认Auth库的替代品,而是在您的代码和库之间的一种东西。

将其视为Auth的工厂类。现在,您不再只有一个表/模型来验证用户,而是可以有多个,并且与先前版本的此包不同,您有权访问所有功能,甚至可以为每种用户类型使用不同的驱动程序。

此外,您还可以同时使用多种认证类型,因此您可以同时作为用户、主账户和管理员登录,而不会发生冲突!

自定义认证驱动程序

在当前这个时间点,为基本Auth类编写的自定义Auth驱动程序将不起作用。我目前正在研究这个问题,但在此期间,您可以更改您的闭包以返回Ollieread\Multiauth\Guard的实例,而不是默认实例。

安装

首先,您需要将此包包含在您的composer.json文件中。

    "require": {
    		"sboo/multiauth" : "4.0.*"
    }

然后,您将需要通过composer更新或安装。

composer update

接下来,您打开app/config/app.php,将'Illuminate\Auth\AuthServiceProvider'替换为

    'Ollieread\Multiauth\MultiauthServiceProvider',

将'Illuminate\Auth\Passwords\PasswordResetServiceProvider'替换为

	'Ollieread\Multiauth\Passwords\PasswordResetServiceProvider',

注意 替换默认服务提供商非常重要。

删除password_resets的原生数据库迁移。

##配置##

也很简单,使用默认值的config/auth.php

    return [

		'driver' => 'eloquent',

		'model' => 'App\User',

		'table' => 'users',

		'password' => [
        		'email' => 'emails.password',
        		'table' => 'password_resets',
        		'expire' => 60,
        	],

	];

现在删除前三个选项(驱动程序、模型和表),并按以下方式替换

    return [

		'multi'	=> [
			'admin' => [
				'driver' => 'eloquent',
				'model'	=> 'App\Admin',
			],
			'client' => [
				'driver' => 'database',
				'table' => 'clients',
				'email' => 'client.emails.password',
			]
		],

		'password' => [
        		'email' => 'emails.password',
        		'table' => 'password_resets',
        		'expire' => 60,
        	],

	];

这是一个示例配置。请注意,您将不得不为每种用户类型创建模型和迁移。以App/User.php和2014_10_12_000000_create_users_table.php为例。

如果您希望为每种用户类型使用不同的提醒电子邮件视图,只需在每个类型中添加一个电子邮件选项,如上例所示。

要生成提醒表,您需要运行以下命令。

php artisan multiauth:resets-table

同样地,如果您想清除所有提醒,您需要运行以下命令。

php artisan multiauth:clear-resets

您还需要将现有的默认Laravel 5文件更改为适应多种认证和密码类型。按照以下代码片段操作

https://gist.github.com/sboo/10943f39429b001dd9d0

用法

所有操作都与原始库完全相同,唯一的例外是所有方法调用都以前缀键(在上面的示例中为account或user)作为方法本身。

    Auth::admin()->attempt(array(
    	'email'		=> $attributes['email'],
    	'password'	=> $attributes['password'],
    ));
    Auth::client()->attempt(array(
    	'email'		=> $attributes['email'],
    	'password'	=> $attributes['password'],
    ));
    Auth::admin()->check();
    Auth::client()->check();

我发现必须调用名为user的用户类型中的user()方法看起来很乱,所以我添加了一个很好的get方法来包裹它。

	Auth::admin()->get();

在您可以模仿另一个用户类型的用户类型的实例中,例如管理员模仿用户来重新创建或检查某些内容时,我添加了一个impersonate()方法,该方法只是对请求用户类型上的loginUsingId()进行包装。

	Auth::admin()->impersonate('client', 1, true);

第一个参数是用户类型,第二个是该用户的id,第三个是是否记住用户,默认为false,所以通常可以省略。

以此类推。

这就完成了!祝您玩得开心。

测试

Laravel集成/控制器测试在基础TestCase类中实现了$be($user)。#be()的实现与Multiauth不正确地工作。为了解决这个问题,按照以下方式实现您自己的#be()版本

    public function authenticateAs($type, $user) {
      $this->app['auth']->$type()->setUser($user);
    }

许可证

本包继承自其父框架Laravel的许可权,因此是开源软件,根据MIT许可证授权