ollieread / multiauth
Requires
- php: >=5.3.0
- illuminate/auth: ~4.1
- illuminate/console: ~4.1
- illuminate/database: ~4.1
- illuminate/filesystem: ~4.1
- illuminate/support: ~4.1
This package is not auto-updated.
Last update: 2022-02-01 12:28:45 UTC
README
它不再受支持或维护,正在被 auth+ 替换。
Laravel Multi Auth
- Laravel: 4.2
- 作者: Ollie Read
- 作者主页: http://ollieread.com
此包不是Laravel默认Auth库的替代品,而是介于你的代码和库之间。
可以将其视为Auth的工厂类。现在,你不再只有一个表/模型来验证用户,而是可以有多个,并且与这个包的早期版本不同,你可以访问所有功能,甚至可以为每个用户类型使用不同的驱动程序。
除此之外,你还可以同时使用多种认证类型,这样你就可以作为用户、主账户和管理员登录,而不会发生冲突!
自定义认证驱动
在当前这个时间点,为基本Auth类编写的自定义Auth驱动将不起作用。我目前正在研究这个问题,但在此期间,你可以通过将闭包返回为 Ollieread\Multiauth\Guard
实例而不是默认实例来解决这个问题。
安装
首先,你需要在你的composer.json文件中包含这个包。
"require": {
"ollieread/multiauth": "dev-master"
}
现在,你将想要通过composer更新或安装。
composer update
接下来,打开app/config/app.php,并将AuthServiceProvider替换为
"Ollieread\Multiauth\MultiauthServiceProvider"
注意 非常重要,你必须替换默认的服务提供者。如果你不希望使用提醒,则删除原始的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替换为以下内容。
Ollieread\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();
在您可以模仿其他用户类型的用户类型的实例中,例如管理员模仿用户以重新创建或检查某事时,我在请求的用户类型上添加了一个impersonate()方法,它简单地封装了loginUsingId()。
Auth::admin()->impersonate('user', 1, true);
第一个参数是用户类型,第二个是该用户的ID,第三个是是否记住用户,默认为false,因此通常可以省略。
以此类推。
好了,完成了!祝您玩得开心。
过滤器
正如预期的那样,由于原始Auth语法中的Auth::guest()
不再工作,因此默认过滤器也不工作。您可以将过滤器修改为类似于auth.admin
和auth.user
,但请记住,它们将不再工作。
有关旧auth过滤器的示例以及如何修复它的说明,请参阅以下gist:https://gist.github.com/ollieread/8303638
测试
Laravel集成/控制器测试将$this->be($user)
应用于基础TestCase类。#be()的实现与Multiauth不正确。为了解决这个问题,按照以下方式实现您自己的#be()版本
public function authenticateAs($type, $user) {
$this->app['auth']->$type()->setUser($user);
}
许可证
此软件包继承了其父框架Laravel的许可,因此是开源软件,根据MIT许可证许可。