esalazarv / multiauth
Laravel 5 多认证驱动程序
Requires
- php: >=5.4.0
- illuminate/auth: ~5.0|~5.1
- illuminate/console: ~5.0|~5.1
- illuminate/database: ~5.0|~5.1
- illuminate/filesystem: ~5.0|~5.1
- illuminate/support: ~5.0|~5.1
This package is not auto-updated.
Last update: 2024-09-18 09:43:49 UTC
README
- Laravel: 5.1.11
- 作者: Eduardo Salazar
- 作者主页: https://github.com/esalazarv
- 作者: Ramon Ackermann
- 作者主页: https://github.com/sboo
- 作者: Ollie Read
- 作者主页: http://ollieread.com
对于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 许可证