chientd / laravel5_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-14 19:09:36 UTC
README
请访问https://github.com/Kbwebs/MultiAuth 以获取替代方案。kbwebs 的分支完全兼容 Laravel 5.1。从我的分支迁移到这个版本不需要对您的代码进行任何更改。
Laravel Multi Auth
- Laravel: 5
- 作者: Ramon Ackermann
- 作者主页: https://github.com/sboo
- 作者: Ollie Read
- 作者主页: http://ollieread.com
关于 Laravel 4.2 版本,请参阅 https://github.com/ollieread/multiauth
重要:Laravel 5.1 默认 AuthController 及其特性不工作!目前,您需要编写自己的控制器来处理这个问题。如果有时间,我会修复它。
\Illuminate\Foundation\Auth\AuthenticatesAndRegistersUsers
更具体地说
Illuminate\Foundation\Auth\AuthenticatesUsers::postLogin()
您需要编写自己的控制器。我将在此问题得到解决时修复它。
这个包不是替代 laravel 默认 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',
注意 替换默认服务提供商非常重要。
删除密码重置的原始数据库迁移。
## 配置 ##
也很简单,使用带有默认值的 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 文件,以适应多认证和密码类型。按照此 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();
在存在可以冒充其他用户类型的用户类型的情况下,例如管理员冒充用户来重演或检查某些内容,我在请求用户类型上添加了一个impersonate()方法,该方法简单地包装了loginUsingId()。
Auth::admin()->impersonate('client', 1, true);
第一个参数是用户类型,第二个是该用户的id,第三个是是否记住用户,默认为false,因此通常可以省略。
等等。
好了,完成了!祝您享受。
测试
Laravel集成/控制器测试将$this->be($user)应用于基础TestCase类。#be()的实现与Multiauth不正确。为了解决这个问题,可以按照以下方式实现自己的#be()版本:
public function authenticateAs($type, $user) { $this->app['auth']->$type()->setUser($user); }
许可证
此包继承了其父框架Laravel的许可证,因此是开源软件,许可协议为MIT许可证