dam1r89/passwordless-auth

此包的最新版本(1.6.0)没有提供许可证信息。

无需密码,仅通过电子邮件验证用户

1.6.0 2020-08-20 18:03 UTC

This package is auto-updated.

Last update: 2024-08-29 14:37:47 UTC


README

特性

  • 路由已预定义(默认为 /passwordless/login
  • 登录和/或注册模式
  • 发送登录电子邮件
  • 邮件发送节流

要开始使用,请使用 composer 安装包

composer require dam1r89/passwordless-auth

config/app.php 配置文件中注册 dam1r89\PasswordlessAuth\PasswordlessAuthServiceProvider 提供者。

dam1r89\PasswordlessAuth\PasswordlessAuthServiceProvider::class,

发布配置。

php artisan vendor:publish --tag=passwordless

配置文件

/*
 * Route prefix for sign-in/sign-up form.
 */
'route_prefix' => 'passwordless',

/*
 * This is a model to which LoginToken is saving reference to.
 * Almost always this will be User class.
 */
'provider' => \App\User::class,

/*
 * Number of seconds user must wait before receiving new sign-up link.
 */
'throttle' => 60 * 10,

/*
 * Should user be automatically signed-up if email is not already used
 */
'sign_up' => true,

/*
 * Default redirect to
 * Redirect url after user is signed in and intended url is not set
 */
'redirect_to' => 'home',

/*
 * If user should be "remembered" after sign-in.
 */
'remember' => true,

用户必须实现 dam1r89\PasswordlessAuth\Contracts\UsersProvider 协议,或者如果用户是 eloquent 模型实例,只需使用 UsersRepository 特性。

use dam1r89\PasswordlessAuth\UsersRepository;
use dam1r89\PasswordlessAuth\Contracts\UsersProvider;

class User extends SparkUser implements UsersProvider
{
    use UsersRepository;

... 并运行迁移

php artisan migrate

将无密码登录作为默认登录方法

对于 Laravel < 5.5

/app/Exceptions/Handler.php 中,将 return redirect()->guest(route('login')); 修改为

return redirect()->guest(route('passwordless.login'));

对于 Laravel 5.5+

由于 Laravel 5.5,/app/Exceptions/Handler.php 中的 unauthenticated() 函数已移动到 vendor/laravel/framework/src/Illuminate/Foundation/Exceptions/Handler.php

您仍然可以使用此方法,但必须重写它。在您的 app/Exceptions/Handler.php 文件中包含

use Request;
use Illuminate\Auth\AuthenticationException;
use Response;

并添加 unauthenticated 函数

    /**
     * Convert an authentication exception into an unauthenticated response.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Illuminate\Auth\AuthenticationException  $exception
     * @return \Illuminate\Http\Response
     */
    protected function unauthenticated($request, AuthenticationException $exception)
    {
        if ($request->expectsJson()) {
            return response()->json(['error' => 'Unauthenticated.'], 401);
        }
        return redirect()->guest(route('passwordless.login'));
    }

视觉

发布视图和电子邮件模板。

php artisan vendor:publish --tag=passwordless-views

视图位于 resources/views/vendor/passwordless 文件夹下。

要替换当前登录链接为无密码登录,请使用此路由名称

<a href="{{ route('passwordless') }}">Login</a>

无密码链接

有时您想要通过电子邮件发送一个将自动登录用户的链接。您可以使用 PasswordlessLink 类来实现。例如,用于通知。

use dam1r89\PasswordlessAuth\PasswordlessLink;

$link = PasswordlessLink::for($notifiable)->url('/route/to/resource');

注意:转发带有未使用登录链接的电子邮件是危险的,因为链接提供了直接访问账户的权限。

类似包

Laravel 无密码认证