gentor/multiauth

Laravel的多认证驱动程序

维护者

详细信息

github.com/gentor/multiauth

源代码

安装: 170

依赖: 0

建议者: 0

安全: 0

星星: 0

关注者: 2

分支: 109

v3.3.1 2014-09-14 13:25 UTC

This package is auto-updated.

Last update: 2024-09-09 03:15:39 UTC


README

Latest Stable Version Total Downloads Latest Unstable Version License

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

将其视为Auth的工厂类。现在,您不仅可以针对多个表/模型进行用户认证,而且还可以访问所有函数,甚至可以为每种用户类型使用不同的驱动程序。

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

自定义认证驱动程序

此版本应该可以与自定义驱动程序一起使用

安装

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

"require": {
		"gentor/multiauth": "dev-master"
}

现在,您将通过composer更新或安装。

composer update

接下来,您打开app/config/app.php,并替换AuthServiceProvider

"Gentor\Multiauth\MultiauthServiceProvider"

注意非常重要,您必须替换默认的服务提供者。如果您不想使用提醒,则请从app/config/app.php中删除原始Reminder服务提供者,否则会导致错误。

配置也非常简单,使用app/config/auth.php的默认值

return array(

	'driver' => 'eloquent',

	'model' => 'User',

	'table' => 'users',

	'reminder' => array(

		'email' => 'emails.auth.reminder',

		'table' => 'password_reminders',

		'expire' => 60,

	),

);

现在删除前三个选项,并按如下方式替换

return array(

	'multi'	=> array(
		'account' => array(
			'driver' => 'eloquent',
			'model'	=> 'Account'
		),
		'user' => array(
			'driver' => 'database',
			'table' => 'users'
		)
	),

	'reminder' => array(

		'email' => 'emails.auth.reminder',

		'table' => 'password_reminders',

		'expire' => 60,

	),

);

提醒

如果您想使用提醒,则需要将app/config/app.php中的ReminderServiceProvider替换为以下内容。

Gentor\Multiauth\Reminders\ReminderServiceProvider

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

php artisan multiauth:reminders-table

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

php artisan multiauth:clear-reminders

由于此包处理认证的方式,已删除reminders-controller命令。我计划在将来调查这个问题。

其概念与默认Auth提醒相同,但您将以相同的方式访问所有内容,即在方法前加上认证类型。

如果您希望为每种用户类型使用不同的视图,则只需在配置中添加一个电子邮件选项,就像在auth.reminder中一样。

要发送提醒,您可以这样做。

Password::account()->remind(Input::only('email'), function($message) {
	$message->subject('Password reminder');
});

要重置密码,您可以这样做。

Password::account()->reset($credentials, function($user, $password) {
	$user->password = Hash::make($password);
	$user->save();
});

由于可能有两个不同类型的不同用户具有相同的令牌,为了简单地区分哪些令牌属于哪个用户,我已修改我的提醒电子邮件以包含一个类型属性。

To reset your password, complete this form: {{ URL::to('password/reset', array($type, $token)) }}.

这将生成如下URL。

http://laravel.ollieread.com/password/reset/account/27eb8fe5fe666b3b8d0521156bbf53266dbca572

这匹配以下路由。

Route::any('/password/reset/{type}/{token}', 'Controller@method');

用法

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

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

我发现必须对名为user的用户类型调用user()方法看起来很杂乱,所以我添加了一个获取方法来包装它。

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

在您可以模仿其他用户类型的情况下,例如管理员模仿用户来重建或检查某些内容,我添加了一个模仿()方法,该方法简单地包装了请求用户类型的loginUsingId()。

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

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

等等。

好了,完成了!祝你们玩得开心。

过滤器

正如预期的那样,由于原始的Auth语法Auth::guest()不再工作,默认过滤器也不再工作。您可以修改过滤器为类似auth.adminauth.user的形式,但请记住,它们将不再工作。

有关旧版auth过滤器的示例以及如何修复它,请参阅以下 gist:https://gist.github.com/ollieread/8303638

测试

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

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

许可证

本软件包继承了其父框架Laravel的许可证,因此是一个开源软件,根据MIT许可证开源。