esalazarv/multiauth

Laravel 5 多认证驱动程序

v5.0.2 2015-10-28 00:30 UTC

This package is not auto-updated.

Last update: 2024-09-18 09:43:49 UTC


README

对于Laravel 5.1.0版本,请查看分支https://github.com/esalazarv/multiauth/tree/L5.1.0 对于Laravel 4.2版本,请查看https://github.com/ollieread/multiauth

重要提示:Laravel 5.1 默认AuthController及其特质

\Illuminate\Foundation\Auth\AuthenticatesAndRegistersUsers

更具体地说

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

本包并非Laravel默认Auth库的替代品,而是位于您的代码与库之间的东西。

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

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

安装

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

    "require": {
    		"esalazarv/multiauth" : "5.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',
			],
			'other' => [
				'driver' => 'customDriver',
				'model'	=> 'App\Other',
			],
		],

		'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文件,以适应多认证和密码类型。按照此gist中的说明进行操作

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();

但是,如果您愿意,您可以指定要使用哪种类型的用户来使用方法uses('YourUserType'),一旦完成,您就可以像使用原始 Auth Facade 一样访问当前用户,就像使用Auth::user()一样简单。

此方法将“admin”设置为当前用户,以便与之协同工作。

	/** You can switch users as needed **/
	Auth::uses('admin');

注意:默认情况下,当前用户是配置数组中的第一个。

现在,您可以像使用原始 Facade Auth 一样访问用户。

	/** Accessing the user using the 'user()' (original method) **/
	if(Auth::user()->check()){
		//
	}

	/** Accessing the user using the 'get()' (additional method)  **/
	if(Auth::get()->check()){
		//
	}

或者使用现有的描述性方法。

	if(Auth::admin()->user()->check()){
		//
	}

	if(Auth::admin()->get()->check()){
		//
	}

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

	Auth::impersonate('client', 1, true);

或者

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

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

等等。

注意:'impersonate()' 方法返回并设置新的用户为当前用户。

您可以知道是否有人被模仿

	/** @return boolean **/
	if(Auth::isImpersonated()){
		//
	}

或者

您可能知道当前用户的模仿者键名

	/** @return string | null **/
	Auth::getImpersonatorName();

或者指定

	/** @return string | null **/
	Auth::client()->getImpersonatorName();

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

测试

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

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

许可证

此软件包继承了其父框架 Laravel 的许可证,因此是开源软件,许可协议为 MIT 许可证