此包已被弃用,不再维护。未建议替换包。

Passless 是 Laravel 5.8 的无密码认证守护驱动器

v2.0.2 2019-07-24 01:51 UTC

This package is auto-updated.

Last update: 2020-04-06 03:06:04 UTC


README

Robert Gramner - Unsplash (UL) #as2iiiiFdqk

Latest Stable Version License Coverage Status Maintainability

Passless

Laravel 的无密码认证驱动器。只需加水。

要求

  • Laravel 6 或 Laravel 7

检查旧版本以获取旧 Laravel 版本。

包含内容

  • Passless 认证守护驱动器
  • Passless 登录控制器
  • LoginAuthentication 通知
  • 一点魔法

安装

只需运行 Composer 并将其要求添加到您的 Laravel 项目中

composer require darkghosthunter/passless

工作原理

此守护程序扩展了默认的 SessionGuard,并且仅覆盖了认证方法以 检查密码,仅当用户通过提供的凭据(电子邮件或您在表单或控制器中设置的任何键)存在时。

要在不输入密码的情况下注册用户,允许在迁移文件中 password 字符串为 nullable()。或者,在注册时传递一个空字符串。

Schema::create('users', function (Blueprint $table) {
    // ...
    
    $table->string('password')->nullable();
    
    $table->rememberToken();
    $table->timestamps();
});

在您的登录表单中,您可以丢弃密码输入,只留下电子邮件或用户名。

<form action="{{ route('auth.login') }}" method="post">
    @csrf
    <input name="email" type="email" placeholder="Put your email">
    <button type="Submit">
</form

这将允许用户通过电子邮件登录(如果他们已注册),如果没有则抛出认证错误。

当用户登录时,将发送一封电子邮件。电子邮件包含一个临时签名的 URL,该 URL 将用户引导到 Passless LoginController,该控制器将使用户登录到您的应用程序。

如何使用

Passless 很容易集成到您的应用程序中,但在开始使用它之前,您应该更改配置中的某些字符串,以便您的应用程序使用此包。

不要担心,它不会以任何方式破坏您的 Laravel 安装。

1) 添加守护驱动器

进入您的 config/auth.php 并将 passless 添加为您的守护程序的驱动程序。

'guards' => [
    'web' => [
        'driver' => 'passless',
        'provider' => 'users',
    ],
    'api' => [
        'driver' => 'token',
        'provider' => 'users',
    ],
],

请记住,在您的登录和注册控制器中使用 passless 驱动程序时,应设置正确的守护程序(在本例中为 web)。

2) 禁用密码验证

在您的登录表单中不应有 password 输入。如果您使用的是默认的 Auth\LoginController 类,您应该覆盖 validateLogin() 方法并禁用密码验证。

/**
 * Validate the user login request.
 *
 * @param  \Illuminate\Http\Request  $request
 * @return void
 */
protected function validateLogin(Request $request)
{
    $this->validate($request, [
        $this->username() => 'required'
        // 'password' => 'required
    ]);
}

3) 添加适当的登录响应

由于在验证凭据后,用户不会立即登录到您的应用程序,因此您应该返回一个视图,通知用户检查他的电子邮件(带有消息或警报)。

您可以使用任何视图来通知用户,只需在登录路由中简单地添加一个闪存通知,并使用正确的标记来在视图中检索并显示通知。

如果您使用的是默认控制器,请添加或替换以下代码

/**
 * The user has been authenticated.
 *
 * @param  \Illuminate\Http\Request  $request
 * @param  mixed  $user
 * @return \Illuminate\Http\Response
 */
protected function authenticated(Request $request, $user)
{ 
    $request->flashOnly(['email']);

    $request->session()->flash('success', 'Check your email to log in!');

    return response()->view('auth.login');
}

由于登录表单中没有密码检查,您可能想在登录路由中添加一个类似于throttle:60,3的节流中间件,以避免邮件窒息。

配置

为了精细调整,发布Passless配置

php artisan vendor:publish --provider="DarkGhostHunter\Passless\PasslessServiceProvider"

如果您满足以下条件,则必须编辑此配置文件:

  • 您正在使用自定义认证控制器。
  • 您在您的路由中使用了额外的中间件。
  • 需要为Passless提供不同的登录。
  • 需要更好的登录电子邮件通知。

配置文件的详细内容一目了然,因此请检查每个设置键的注释。

许可证

本软件包遵循MIT许可证