paschaldev / laravauth
Laravel身份验证,具有独特的技巧。
Requires
- messagebird/php-rest-api: 1.10.*
- nexmo/laravel: ^1.1.1
- twilio/sdk: ^5.28
Requires (Dev)
- laravel/laravel: dev-develop
This package is auto-updated.
Last update: 2024-09-12 23:56:56 UTC
README
Laravel身份验证,具有独特的技巧。
Laravauth 是一个用于 Laravel 的身份验证包,它使用与传统身份验证方法不同的技术。
需求:Laravel >= 5.4
概述
此包通过钩子工作。如何?简单地将钩子连接到 login
路由,拦截它并从那里继续工作。
钩子的第一步来自于您的路由,默认路由是一个向 login
发送的 POST 请求,一旦有请求到该路由,插件就会激活。以下是一些可用的授权模式:
- 电子邮件令牌
- 双因素认证(短信)
电子邮件令牌
此类型的认证不需要密码。用户只需提供其电子邮件地址(必须是已注册用户),如果电子邮件存在于数据库中,就会向用户的电子邮件地址发送包含安全令牌的临时登录链接。此登录链接仅对特定时间段有效,默认为 10 分钟后,链接将失效,用户将不得不重新发起登录请求。
双因素认证(短信)
双因素认证是一个额外的安全层,确保用户有另一个“他们拥有的”东西与“他们知道的”东西相结合。“他们知道的”通常是他们的密码,而在此情况下,“他们拥有的”是一个个人手机号,会将令牌发送到。 了解更多
此授权模式需要用户输入密码和手机号码。用户提供登录凭证后,默认为 email
和 password
,Laravauth 将显示一个请求令牌的页面,将一个短暂有效的令牌(默认为 10 分钟)发送到用户的手机。用户提供令牌,如果有效,则用户被认证。
安装
此包的安装过程非常简单。第一步是使用 composer 进行需求。
$ composer require paschaldev/laravauth
打开您 Laravel 安装配置目录中的 app.php
文件,并在 providers
数组中添加此行。
PaschalDev\Laravauth\Providers\LaravauthServiceProvider::class,
您需要发布配置和视图文件。
$ php artisan vendor:publish --provider="PaschalDev\Laravauth\Providers\LaravauthServiceProvider"
Laravauth 修改用户表并添加用于身份验证的额外列。下一步是迁移数据库。
确保在继续之前,您的数据库已设置并运行良好。
默认配置假设用户模型为 App\Users
,如果您的应用程序中不是这样,请跳过此步骤,在运行以下命令之前,请更新 laravauth 配置以反映此更改。
现在运行
$ php artisan migrate
如果一切顺利,迁移成功。这就完成了。安装完成。
用法
Laravauth 不包含 login
视图,您可以使用现有的 login
视图并做一些小的修改。
根据您选择的模式,有不同的工作方式。配置文件包含您需要调整包以便完美集成到应用程序中的所有内容。
Laravauth 对您之前的应用程序代码的修改需求很小或无需修改,从开始到结束一切运行顺畅。您不需要对代码做任何修改,只需确保在发布后,在配置目录下的 laravauth 配置文件 laravauth.php
中输入正确的配置值。
电子邮件令牌
这是默认模式。在这个模式中,只需要在登录视图中输入用户电子邮件即可。如下所示
<input type="email" name="email" />
Laravauth 使用默认的 email
。如果您的登录视图中使用的名称不是 email
,例如
<input type="email" name="user_email" />
您需要更新 Laravauth 的配置文件以匹配,打开配置文件 laravauth.php
,将配置 login_id
修改为 user_email
,然后您就可以继续了。
Laravauth 假设用户表中的电子邮件列名为 email
,如果它不是这样,将配置 login_id_rel
修改为与用户表中电子邮件列的名称相匹配。
备注:非常重要,请确保您的应用程序的 url
在 Laravel 的 app.php
配置文件中设置正确,否则包可能会生成无效链接。
双因素认证(短信)
这种授权模式需要 SMS 提供商。这个包附带了几种提供商
您可以通过更改 laravauth
配置文件中的值来选择您偏好的提供商。查找 two_factor_sms
选项,它是一个包含双因素 SMS 模式的特定配置的数组。在数组中有一个可以切换的 gateway
选项。可能的值是 nexmo
和 twilio
。
这些提供商都有自己的特定要求。您需要注册您选择的任何提供商。
备注:使用此选项,您应该知道您应该有大量的余额来应对频繁的登录。
Nexmo
Nexmo 需要在您的 .env
文件中添加并设置以下内容
NEXMO_KEY=xxxxxx
NEXMO_SECRET=xxxxxx
NEXMO_FROM=xxxxxx
您可以在创建账户后从仪表板获取 Nexmo 密钥和密钥。
Twilio
Twilio 需要在您的 .env
文件中添加以下内容
TWILIO_SID=xxxxxx
TWILIO_TOKEN=xxxxx
TWILIO_FROM=xxxxx
您可以从 Twilio 仪表板获取所有值。`TWILIO_FROM` 是您创建账户完成后获得的电话号码。这是您的短信将从这个地方发出。
MessageBird
MessageBird 需要在您的 .env
文件中添加并设置以下内容
MESSAGEBIRD_KEY=xxxxxx
MESSAGEBIRD_FROM=xxxxxx
您可以在创建账户后从仪表板获取 MessageBird 密钥。
设置 SMS 提供商后,您几乎就完成了。现在您需要告诉 Laravauth 如何通过添加以下方法到您的用户模型中来获取用户的电话号码:`laravauthPhone()`。
class User extends Authenticatable { use Notifiable; . . . public function laravauthPhone() { //The logic to retrieve user's phone number. } }
接下来是验证令牌的视图。在这个模式中,默认情况下,它要求用户使用 email
和 password
登录。如果您的登录不是这样的,也许您使用的是 username
和 password
,没问题,只需更新您的配置文件,并将 login_id
和 login_id_rel
设置为正确的值。
这两个选项需要从您的 login
视图中传递,相应的 email
或其他情况以及 password
。此外,如果您的密码使用的是除 password
之外的其他名称,请确保更新配置中的 password_id
,如果数据库中用户表的密码列使用的是除 'password' 之外的其他名称,还需要更新 password_id_rel
。
一旦用户登录并且凭证有效,就会提供请求令牌的页面。 Laravauth 附带了一个示例工作页面。主要的是下面的标记
<form method="POST" action="{{ url('/validate') }}"> <input type="text" name="{{ laravauth_token_var_name() }}" /> <button type="submit">Submit</button> {{ csrf_field() }} </form>
Laravauth 使用不同的路由来验证身份验证,这可以在您的配置文件中自定义,查找 validator_route
并调整以满足您的需求。默认为 'validate'
。表单的 action 属性应指向验证路由,方法也应为 POST
。
还需要的是 token
输入。这不应与 Laravel 自带的用于防止 CSRF(跨站请求伪造)的 _token
混淆。您可以通过更新配置文件中的 token_var
选项来更改 Laravauth 使用的 token
变量的名称,默认为 'token'
。 Laravauth 有一个辅助方法 laravauth_token_var_name()
来输出这个变量名,所以您无需担心太多,只需在将发送到验证路由的输入的 name
属性中输出该函数即可。
一旦表单提交,validator
会确认它是否是一个有效的令牌,如果不是,页面将被重新提供。如果是有效的,用户将被认证并重定向到您定义的认证页面。
配置
Laravauth 包含一系列配置,您可以在 laravauth
配置文件中查看所有可用选项,它们都有文档说明,应该很容易看到它们的作用。
一个值得注意的选项是 soft_disable
。如果您想暂时禁用 Laravauth 而不删除该包,只需将此值设置为 true
,Laravauth 就会进入睡眠模式,它不会拦截您的登录。
另一个非常重要的选项是 user_model
选项。这应该指向访问您用户表的模型。默认为 App\User
,这是 Laravel 的默认设置。
有关更多选项,请检查配置文件。