andheiberg / auth
基于laravel auth基础包的扩展
Requires
- php: >=5.4.0
- illuminate/cookie: 4.2.*
- illuminate/encryption: 4.2.*
- illuminate/events: 4.2.*
- illuminate/hashing: 4.2.*
- illuminate/http: 4.2.*
- illuminate/session: 4.2.*
- illuminate/support: 4.2.*
- nesbot/carbon: ~1.0
Requires (Dev)
- illuminate/console: 4.2.*
- illuminate/routing: 4.2.*
- phpunit/phpunit: 4.0.*
Suggests
- andheiberg/notify: Allows the package controllers to notify the user. (if you write your own controllers this is not needed)
This package is not auto-updated.
Last update: 2024-09-14 15:01:57 UTC
README
laravel的illuminate/auth包的扩展。
auth包非常不错,但可能略显简单。我在不增加负担的情况下,尝试添加了最必要的功能。
此包建立在良好的基础上,并添加了
- 即插即用(包括视图、路由、控制器等,因此最基本安装仅需5分钟。)
- 邮箱验证(点击邮件中的链接以验证您的邮箱)
- 事件以实现扩展性
- 将异常用于错误处理
- 更细粒度的验证反馈(更好的用户体验)
- 包含密码哈希(减少样板代码)
目录
安装
将包添加到您的composer项目中。
composer require andheiberg/auth:2.*
在app/config/app.php
中注册服务提供者。
// 'Illuminate\Auth\AuthServiceProvider',
// 'Illuminate\Auth\Reminders\ReminderServiceProvider',
'Andheiberg\Auth\AuthServiceProvider',
在app/config/app.php
中将别名添加到别名列表中。
// 'Auth' => 'Illuminate\Support\Facades\Auth',
// 'Password' => 'Illuminate\Support\Facades\Password',
'Auth' => 'Andheiberg\Auth\Facades\Auth',
'Password' => 'Andheiberg\Auth\Facades\Password',
'AuthVerify' => 'Andheiberg\Auth\Facades\AuthVerify',
您还需要让您的模型实现UserInterface和RemindableInterface。如果您使用eloquent,可以简单地引入相应的特质。
use Andheiberg\Auth\UserTrait;
use Andheiberg\Auth\UserInterface;
use Andheiberg\Auth\Reminders\RemindableTrait;
use Andheiberg\Auth\Reminders\RemindableInterface;
class User extends Eloquent implements UserInterface, RemindableInterface {
use UserTrait, RemindableTrait;
}
然后您需要设置数据库,可以使用提供的迁移文件或您自己的。
要使用打包的迁移,请运行php artisan migrate --bench="andheiberg/auth"
。
如果您想自己编写,可以考虑使用php artisan auth:reminders-table
和php artisan auth:users-table
将打包的存根发布到您的迁移文件夹。
配置
一切都可以配置。此包可以在不同级别上进行模块化更改(语言文件、视图、控制器、路由、auth扩展)。
第1级 - 更改配置选项
在命令行应用程序中运行此命令以创建配置文件
$ php artisan config:publish andheiberg/auth
配置文件将在此处发布:app/config/packages/andheiberg/auth/config.php
。
在这里,您可以更改用户模型、表以及一些其他内容,还可以禁用包路由。
第2级 - 更改语言文件
您可能对打包视图设置的布局感到满意,但您希望编辑其中的文本。
在命令行应用程序中运行此命令以创建语言文件
$ php artisan auth:lang
语言文件将在此处发布:app/lang/packages/en/auth
。
第3级 - 更改视图
如果您希望更改认证页面或电子邮件的布局,可以覆盖打包的视图。
在命令行应用程序中运行此命令以创建新的视图文件
$ php artisan view:publish andheiberg/auth
视图文件将在此处发布:app/views/packages/andheiberg/auth
。
第4级 - 更改控制器和路由
登录、密码重置和邮箱验证可能不需要更改,但您可能希望在注册流程中添加多个步骤,此时需要编写自己的控制器。
要使用打包的控制器作为起点,在命令行应用程序中运行此命令
$ php artisan auth:controllers
控制器将发布在此处:app/controllres/auth
。
为了使用这些新的控制器,您需要编写新的路由并在配置文件中禁用包路由。
5级 - 扩展认证
与 illuminate/auth 类似,如果您不希望使用 eloquent 或想更改哈希库或其他方式更改包,可以扩展认证以使用新的用户提供者。
使用
原始认证接口没有更改,因此您可以始终使用 Laravel 认证文档。
我添加了一个 Auth::register()
命令,使注册更容易且更明显。
它还允许我自动哈希密码并发送验证电子邮件。它还使得在注册后可选地登录用户成为可能。
/**
* Register a new user using the given credentials.
*
* @param array $credentials
* @param bool $verify
* @param bool $login
* @param bool $remember
* @return bool
*/
public function register(array $credentials = array(), $verify = true, $login = false, $remember = false);
以下添加项也应考虑。
即插即用
大多数项目都需要认证。复制粘贴或重新编写每个相关的视图、控制器、本地化文件和路由既费时又浪费。
Auth 可以直接使用。该包包含您开始所需的全部内容,但一切都可以自定义。您可以禁用路由并编写自己的控制器、视图、路由等。
可以在配置文件中禁用路由。
然后您可以从头开始创建自己的控制器或使用我们的控制器作为起点。
要将我们的控制器移动到您的 app/controllers
,请使用 php artisan auth:controllers
。
要将我们的视图移动到您的 app/views
,请使用 php artisan view:publish andheiberg/auth
。
要将我们的本地化文件移动到您的 app/lang
,请使用 php artisan auth:lang
。
请注意,即插即用的控制器使用 andheiberg/notify
将成功通知推送到视图。如果您想使用这些控制器,因此需要安装它。 说明可以在此处找到。
电子邮件验证
如果使用事务性电子邮件,则虚假或错误输入的电子邮件是一个问题。此外,您可能希望创建一个障碍,以阻止垃圾邮件发送者轻松创建无限账户。
解决此问题的最常见方法是,在用户注册后向新账户持有人发送一个包含唯一链接的验证电子邮件,该链接需要点击以验证电子邮件地址。
这已添加到注册流程中。
您可以在 app/views/packages/auth/emails/verification.blade.php
中覆盖电子邮件视图(见 即插即用)
AuthVerification::remind()
和 AuthVerification::verify()
可用于重新发送电子邮件和验证已发送令牌的电子邮件。
/**
* Send a verification reminder to a user.
*
* @param array $credentials
* @param Closure $callback
* @return string
*/
public function remind(array $credentials, Closure $callback = null)
/**
* Verify the email for the given token.
*
* @param array $credentials
* @param Closure $callback
* @return mixed
*/
public function verify(array $credentials)
事件
注册流程非常复杂且特定于您的应用程序。您可能想发送欢迎电子邮件或将与新用户相关的复杂工作排队。
为了便于此操作,我已添加一系列事件,您可以监听以添加您应用程序特定的逻辑。
auth.register
auth.registered
auth.verify
auth.verified
auth.login
auth.loggedin
auth.logout
auth.resetting-password
auth.password-reset
异常
原始认证包没有使用异常进行错误处理,而是使用布尔返回和返回代码的混合。
我发现异常更清晰,更容易理解,也更易于编写代码。
然而,我理解便利性的需要,而捕获 100 个不同的 AuthExceptions
虽然很有力,但可能很繁琐。因此,我为 AuthException
添加了一个 messages()
函数,该函数返回一个表示验证错误的数组。这可以与 RedirectResponse 的 withErrors()
结合使用,非常强大。
try
{
$credentials = Input::only(['email', 'password']);
Auth::attempt($credentials, true);
return Redirect::intended(route('dashboard'));
}
catch (AuthException $e)
{
return Redirect::back()->withInput()->withErrors($e->messages());
}
验证
构建良好的注册流程可以让你摆脱堆积如山的客户支持和收入损失。因此,用户体验设计(UX)非常重要。
注册验证难以通用化,但登录可以很容易地通用化。
-
UserNotFoundException
- 我们找不到具有该电子邮件地址的用户。 -
UserIncorrectPasswordException
- 我想你可能输入了错误的密码。 -
UserUnverifiedException
- 您尚未验证您的电子邮件。 <a href="/resend-verification-email">获取新的验证邮件。 -
UserDeactivatedException
- 您的账户已被禁用。