zionon/multiauth

Laravel 5.1 的 MultiAuth

v1.4 2016-09-18 07:02 UTC

This package is not auto-updated.

Last update: 2024-09-14 19:47:34 UTC


README

安装

代码基于Kbwebs/MultiAuth完善!!!

composer require zionon/multiauth "1.*"

身份验证

打开 config/app.php 文件,将 AuthServiceProvider 替换为

Illuminate\Auth\AuthServiceProvider::class -> Zionon\MultiAuth\AuthServiceProvider::class

打开 config/auth.php 文件,删除:(如果搭配entrust使用的话,建议保留)

'driver'  => 'eloquent'
'model'   => App\User::class,
'table'   => 'users'

并替换为以下数组

'multi-auth' => [
     'user' => [
        'driver' => 'eloquent',
        'model'  => App\User::class
    ],
    'admin' => [
        'driver' => 'eloquent',
        'model'  => App\Admin::class
    ]
]

如果想要使用数据库代替 Eloquent,可以这样使用

'user' => [
    'driver' => 'database',
    'table'  => 'users'
]

密码重置

如果后台不需要通过邮件重置密码的话(后台不建议开启邮件重置密码),使用laravel自带的即可,使用的是config/auth配置中'multi-auth'数组的第一个认证driver。只需要把默认的app/Http/Controllers/Auth/PasswordController

Illuminate\Foundation\Auth\ResetsPasswords  ->
Zionon\MultiAuth\Auth\ResetsPasswords

后台不需要邮件重置的密码的话,下面的可不需要做

打开 config/app.php 文件,将 PasswordResetServiceProvider 替换为

Illuminate\Auth\Passwords\PasswordResetServiceProvider::class -> Zionon\MultiAuth\PasswordResets\PasswordResetServiceProvider::class

如果你想要使用此包提供的密码重置功能,需要在每个使用密码重置功能的 Model 中做如下更改

use Illuminate\Auth\Passwords\CanResetPassword;
use Illuminate\Contracts\Auth\CanResetPassword as CanResetPasswordContract;

use Zionon\MultiAuth\PasswordResets\CanResetPassword;
use Zionon\MultiAuth\PasswordResets\Contracts\CanResetPassword as CanResetPasswordContract;

如果你想要为每种身份验证类型更改密码重置的视图,可以将以下内容添加到 config/auth.php 中的 multi-auth 数组中

'email' => 'emails.users.password'

如果不添加此行,Laravel 将自动使用默认路径 emails.password,正如其在 password 数组中定义的那样。

要生成密码重置表,需要运行以下命令

php artisan zionon:multi-auth:create-resets-table

同样,如果你想要清除所有密码重置,需要运行以下命令

php artisan zionon:multi-auth:clear-resets

注意 替换默认服务提供者非常重要。如果你不希望使用密码重置,则应删除原始的密码重置服务提供者,否则将会引起错误。

使用方法

身份验证

直接使用 trait 即可

use Zionon\MultiAuth\Auth\ThrottlesLogins;
use Zionon\MultiAuth\Auth\AuthenticatesAndRegistersUsers;

然后在控制器中指定使用的 model

protected $authModel = 'user'

其他属性和laravel自带的属性一样可以设置,新增的有

$loginView 登录显示文件

$registerView 注册显示文件

$remember 是否使用记住我功能

重点说明多重登录,比如可以同时使用用户名、邮件、手机号码登录,暂时只做了这三个,大部分情况应该也足够用了。

属性 $username 为多重登录的关键,如果属性未设置或为字符串则是单认证登录,默认为 email,可以改为用户名或手机号码。

如果 $username 是数组,则需要将登录认证的数组填入其中,默认使用的 name 为 authfield。如果自定义,则必须将 authfield 添加到数组中,否则会报错。

待办事项列表

完善密码重置以及密码重置页面自定义

完善README

编写一个demo

完善多重登录

密码重置

密码也已经重写,使用了 trait

它的工作方式与原始的 Laravel 身份验证库一样,唯一的区别是 user()admin() 将匹配身份验证类型,正如你在 multi-auth 数组中定义的那样。

Password::sendResetLink($request->only('email'), function (Message $message) {
    $message->subject($this->getEmailSubject());
});

但现在它必须如下所示,使用 user()admin()

Password::user()->sendResetLink($request->only('email'), function (Message $message) {
    $message->subject($this->getEmailSubject());
});

密码重置邮件示例

Click here to reset your password: {{ URL::to('password/reset', array($type, $token)) }}.

这会生成如下 URL

http://example.com/password/reset/user/21eb8ee5fe666r3b8d0521156bbf53266bnca572

这将匹配以下路由

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

提示

请记住更新所有使用 Auth:: 的地方,改为 Auth::user() 或你在 config/auth.php 中定义的任何内容。